2015-02-08 88 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?我會堅持路線提供者並將其從身體中移除。

相關問題