如何让 ui-router controller 工作?
How can I make ui-router controller to work?
我设置了两个简单的 URL,具有简单的不同模板和相同的控制器,但它不起作用
头:
<script src="jsLib/angular_v1.4.js" type="text/javascript"></script>
<script src="jsLib/angular-ui-router.min.js" type="text/javascript"></script>
<script src="routes.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
HTML:
<body ng-controller="MainCTRL as ctrl">
{{ctrl.nameApp}}
<div ui-view></div>
app.js:
angular
.module("app", ["ui.router"])
.controller("MainCTRL", MainCTRL)
.config(configA);
function MainCTRL($location){
this.nameApp = "nameApp";
}
routes.js:
function configA($urlRouterProvider, $stateProvider){
$urlRouterProvider.otherwise("/");
$stateProvider
.state("/",{
url: "/",
templateUrl : "/testingBlock.htm",
controller : "MainCTRL"
})
.state("login",{
url: "/login",
templateUrl : "/app/templates/login.htm",
controller : "MainCTRL"
});
}
login.htm:
<div>Header</div>
<div>Main</div>
<div>Footer</div>
{{name.nameApp}}
testingBlock.htm:
<h2>Hello goHenry</h2>
{{MainCTRL.nameApp}}
不显示MainCTRL.nameApp
想告诉你问题出在哪里,但没有找到。但后来我意识到问题出在状态视图内部。
有a working version of your code.
所有的调整真的很小(不重要)。 index.html
<html ng-app="app" >
<head>
<title>my app</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"
></script>
<script src="//rawgit.com/angular-ui/ui-router/0.2.15/release/angular-ui-router.js"
></script>
<script src="routes.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCTRL as ctrl">
{{ctrl.nameApp}}
<br><a href="#/">#/</a> - default
<br><a href="#/login">login</a>
<hr><div ui-view=""></div>
</body>
</html>
大佬来了"controllerAs"
$stateProvider
.state("/",{
url: "/",
templateUrl : "testingBlock.htm",
controller : "MainCTRL",
controllerAs:"MainCTRL",
})
.state("login",{
url: "/login",
templateUrl : "app/templates/login.htm",
controller : "MainCTRL",
controllerAs:"name",
});
那么,有什么不同呢?支持这些声明:
{{name.nameApp}}
在 "testingBlock.htm",
{{MainCTRL.nameApp}}
在 "app/templates/login.htm",
我们需要使用 controllerAs 和 name 作为名称或 MainCTRL(比较你的代码和 this example)
注意:不要混合使用 ng-controller
和 UI-Router
状态 控制器。这些应该是不同的对象,因为 UI-Router
可以使用其他 resolve 然后 angular 本机 ng-controller
。以后可能会带来惊喜...
我设置了两个简单的 URL,具有简单的不同模板和相同的控制器,但它不起作用
头:
<script src="jsLib/angular_v1.4.js" type="text/javascript"></script>
<script src="jsLib/angular-ui-router.min.js" type="text/javascript"></script>
<script src="routes.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
HTML:
<body ng-controller="MainCTRL as ctrl">
{{ctrl.nameApp}}
<div ui-view></div>
app.js:
angular
.module("app", ["ui.router"])
.controller("MainCTRL", MainCTRL)
.config(configA);
function MainCTRL($location){
this.nameApp = "nameApp";
}
routes.js:
function configA($urlRouterProvider, $stateProvider){
$urlRouterProvider.otherwise("/");
$stateProvider
.state("/",{
url: "/",
templateUrl : "/testingBlock.htm",
controller : "MainCTRL"
})
.state("login",{
url: "/login",
templateUrl : "/app/templates/login.htm",
controller : "MainCTRL"
});
}
login.htm:
<div>Header</div>
<div>Main</div>
<div>Footer</div>
{{name.nameApp}}
testingBlock.htm:
<h2>Hello goHenry</h2>
{{MainCTRL.nameApp}}
不显示MainCTRL.nameApp
想告诉你问题出在哪里,但没有找到。但后来我意识到问题出在状态视图内部。
有a working version of your code.
所有的调整真的很小(不重要)。 index.html
<html ng-app="app" >
<head>
<title>my app</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"
></script>
<script src="//rawgit.com/angular-ui/ui-router/0.2.15/release/angular-ui-router.js"
></script>
<script src="routes.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCTRL as ctrl">
{{ctrl.nameApp}}
<br><a href="#/">#/</a> - default
<br><a href="#/login">login</a>
<hr><div ui-view=""></div>
</body>
</html>
大佬来了"controllerAs"
$stateProvider
.state("/",{
url: "/",
templateUrl : "testingBlock.htm",
controller : "MainCTRL",
controllerAs:"MainCTRL",
})
.state("login",{
url: "/login",
templateUrl : "app/templates/login.htm",
controller : "MainCTRL",
controllerAs:"name",
});
那么,有什么不同呢?支持这些声明:
{{name.nameApp}}
在 "testingBlock.htm",{{MainCTRL.nameApp}}
在 "app/templates/login.htm",
我们需要使用 controllerAs 和 name 作为名称或 MainCTRL(比较你的代码和 this example)
注意:不要混合使用 ng-controller
和 UI-Router
状态 控制器。这些应该是不同的对象,因为 UI-Router
可以使用其他 resolve 然后 angular 本机 ng-controller
。以后可能会带来惊喜...