Angularjs嵌套的控制器只被调用一次
Angularjs nested controller called just one time
我是Angularjs的新手,我有一个应用程序,有一些"项目",在一些页面上显示一个本地菜单。Index.html包含带有页脚的主导航栏:
<body ng-app="ysi-app" ng-controller="MainController">
<div class="page-content">
<div class="row">
<div class="col-md-2">
<div class="sidebar content-box" style="display: block;">
<ul class="nav">
<!-- Main menu -->
<li ng-if="isAuthenticated()"><a href="#/">{{name}}</a></li>
<li class="current"><a href="index.html">Dashboard</a></li>
<li><a href="#/project">Projects</a></li>
</ul>
</div>
<div ng-if="isAuthenticated() && displayProjectMenu == true" ng-include="'views/localMenu.html'" ng-controller="LocalMenuController">
</div>
</div>
<div ng-view></div>
</div>
所以我有一个嵌套控制器LocalMenuController用于本地菜单和一个主控制器。项目控制器设置数据:
angular.module('ProjectCtrl',[]).controller('ProjectController',function($scope,$location, ProjectService,$route, AuthenticationService, $rootScope){
$scope.setProjectDatas = function(projectName, projectId){
ProjectService.setName(projectName);
$rootScope.projectId = projectId;
};});
我将一个项目的id设置为$rootScope进行测试(我有一个服务会做得更好),并在LocalMenuController:
中获得它angular.module('LocalMenuCtrl',[]).controller('LocalMenuController', function($scope, ProjectService, $rootScope) {
$scope.projectId = '';
$scope.projectId = $rootScope.projectId;
});
我在表中显示项目,当我单击其中一个时,函数 setprojectdata (name,id)被调用。问题是,当我点击一个项目,该项目的id是正确的和设置,但当我去之前,点击另一个项目,id是以前点击的项目的旧id。数据没有更新。我在谷歌上搜索了我的问题,但没有找到。
我认为LocalMenuController只调用一次,而不是之后。
我做错了什么?
谢谢
我已经创建了一个显示模板的指令,但它仍然没有更新局部视图localMenu。LocalMenu指令:
angular.module('LocalMenuCtrl',[]).controller('LocalMenuController', function($scope, ProjectService, $rootScope) {
console.log('-> LocalMenu controller');
})
.directive('localMenu', function($rootScope){
return {
templateUrl: '/YSI-Dev/public/views/partials/localMenu.html',
link: function(scope){
scope.projectId = $rootScope.projectId;
}
};
});
index.html的一部分
<div ng-if="isAuthenticated() && displayProjectMenu == true" ng-controller="LocalMenuController">
<div local-menu></div>
</div>
局部视图localMenu:
<div class="sidebar content-box" style="display: block;">
<ul class="nav">
<li><a href="#/project/{{projectId}}"><i class="glyphicon glyphicon-list-alt"></i> Backlog</a></li>
<li><a href="#/project/{{projectId}}/members"><i class="glyphicon glyphicon-user"></i> My team </a></li>
</ul>
</div>
我正试图从$rootScope中获得projectId并将其注入<a href="#/project/{{projectId}}"
,但我有一些麻烦。怎么做呢?
首先,尝试使用指令而不是ng-controller。您可以将代码和模板封装到一个单元中。您也可以尝试创建一个组件。向指令/组件传递一些数据,Angular就会负责更新模板,并在指令/组件中运行任何需要运行的东西。(假设您使用了双向数据绑定)
从上面的代码中,我看不出什么会触发LocalMenuController再次运行。
- 如何用JavaScriptEasy的方式一次调用大量restful服务
- 有没有一种方法可以在一次调用中修改每个jquery对象的特定属性
- 如何在一次调用中使用jquery从外部文件中获取多个剑道ui模板
- JS - 正则表达式替换在一次调用中发生多次,如何让它运行一次
- 进度条函数在一次调用后中断
- 如何使用上一次调用的数据进行第二次 JS .post 调用
- 如何通过一次调用 Facebook Graph API 来获取多个相册图片 URL
- 创建不会中断上一次调用的重复动画
- 如何只需一次调用就可以将对象数组保存到mongoose DB中
- 为什么函数只运行一次?在上一次调用完成后,尝试使用计数器函数多次运行函数
- 如何在android中一次调用多个java脚本函数来加载webview
- 下划线throttle+确保最后一次调用
- 如何重复调用一个函数并等待下一次调用之前完成
- 如何从函数的最后一次调用中判断它是同步调用还是异步调用?
- 我有这三个函数,该怎么做呢在onload时一个接一个地调用它们在refresh时一次调用一个函数
- 函数只适用于最后一次调用
- 一次调用两个函数
- 在Symfony 2上使用Assetic组合文件,只对所有CSS文件进行一次调用
- 烬:每5秒轮询一次api,但要在获得前一次调用的响应之后
- 一次调用多个ajax函数,PHP, ajax