ui-router 用$state.go时controller会跑两次
代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Ui State Demo</title>
<meta charset="utf-8">
<!--AngularJS v1.5.9-->
<script type="text/javascript" src="angular.min.js"></script>
<!--angular-ui-router v1.0.3-->
<script type="text/javascript" src="angular-ui-router.min.js"></script>
<script type="text/javascript">
var app = angular.module('uiDemo', ['ui.router']);
app.config(function($stateProvider) {
$stateProvider.state('parent', {
url: '/parent',
controller: 'ParentController'
}).state('parentChildOne', {
controller: 'ChildOneController',
template: '<h1>Child One</h2>'
}).state('parentChildTwo', {
controller: 'ChildTwoController',
template: '<h1>Child Two</h2>'
});
});
app.controller('ParentController', ['$state', function($state) {
console.log('Parent Controller Start');
if (Math.round(Math.random()) == 0) {
$state.go('parentChildOne');
} else {
$state.go('parentChildTwo');
}
}]);
app.controller('ChildOneController', ['$state', function($state) {
console.log('Child One');
}]);
app.controller('ChildTwoController', ['$state', function($state) {
console.log('Child Two');
}]);
</script>
</head>
<body ng-app="uiDemo">
<nav>
<a ui-sref="parent">Parent</a>
</nav>
<ui-view></ui-view>
</body>
</html>
当点击“Parent”时,ParentController
会跑两次(打出两次console.log('Parent Controller Start'))。有遇到过这个问题的么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
调用两次是因为在代码中出现了2次跳转,第一次是加载parent这个Url,第二次是parentChildOne或者parentChild中的一个,但是配置文件中parentChildOne,和parentChildTwo 中url又缺失,所以就相当于重载了一次页面,而重载上次的url,上次的url没有变化,相当于重新读取了parent这个url。因此调了两次!
处理办法有两种:
你在html上有没有配置ng-controller="ParentController" ? 路由和html只要配置一处即可