2015-02-08 57 views
2

我有一个指令,根据绑定到我的主页中的对象属性显示在侧面板中。和根据散列路由加载不同内容的ng-view指令。它看起来像这样。根范围在标签上,并且是主控制器。Angular.js ng-if指令不会在控制器之间更新

<body ng-controller="Main"> 
    <auth-panel ng-show="viewModel.panels.auth"></auth-panel> 
    <ng-view></ng-view> 
</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' 
}); 

当im在主页面中该属性为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-如果有很多在过去,我知道它应当具有约束力的价值和隐藏&显示指令动态。 有没有人遇到过这个错误,或者可能是我错过了一些东西?

+0

我没有看到ng - 如果你的代码中有任何地方,你的意思是在auth-panel中的ng-show?我认为问题可能是两个控制器的两个范围是相互独立的。 – 2016-01-20 14:28:10

回答

0

我会尝试使用类似

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

而且你为什么无论是在身体和路线提供商设置控制器周围的DIV?我会坚持路线提供者并将其从身体中移除。

相关问题