Angular.js ng-if指令不在控制器之间更新

时间:2015-02-08 17:24:48

标签: javascript angularjs

我有一个指令,我根据对侧面板主页中对象属性的绑定显示。和ng-view指令根据哈希路由加载不同的内容。它看起来像这样。根作用域在标记上,并且是主控制器。

<body ng-controller="Main">
     <auth-panel ng-show="viewModel.panels.auth"></auth-panel>
     <ng-view></ng-view>
</body>

在主页面中,使用与body相同的控制器加载ng-view指令的内容。body是使用config中的路由服务加载的。 当我路由到第二页时,我使用另一个控制器,使viewModel.panels.auth成为真。

$routeProvider.when('/',{
    templateUrl : 'pages/views/main.html',
    controller  : 'Main'
});
$routeProvider.when('/peopleNPlaces',{
    templateUrl : 'pages/views/peopleNPlaces.html',
    controller  : 'PeopleNPlaces'
});

当我在主页面中时,此属性为false。 当我移动到下一页“PeopleNPlaces”时,它会显示使用ng-if和truthy值。但由于某种原因,当我使用浏览器返回事件导航回来时,我可以看到主控制器运行并且值设置为false,但是ng-if指令不会更新,指令“auth-panel”仍然显示,好像绑定不起作用。

app.controller('Main',['$scope',function($scope){
    $scope.viewModel = {
        panels:{
            auth:false
        }
}]);

neura.controller('PeopleNPlaces',['$scope',function($scope){
    $scope.viewModel.panels.auth = true;
});

指令看起来像这样。

 app.directive('authPanel',function(){

return {
    templateUrl:'js/directives/authPanel.html',
    restrict:'E',
    scope:{
        viewModel:'='
    },
    link:function($element,$attrs,$scope){
        console.log();
    },
    controller:function($scope,$attrs){
        console.log();
    }
}
 });

我过去使用过ng-if,我知道它应该绑定到值并隐藏&amp;动态显示指令。 有没有人遇到过这个bug,或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

我会尝试使用像

这样的周围div
<body ng-controller="Main">
    <div ng-show="viewModel.panels.auth">
        <auth-panel></auth-panel>
    </div>
    <ng-view></ng-view>
</body>

另外,为什么要在车身和路线提供商中设置控制器?我会坚持使用路线提供者并将其从身体中移除。