0

视图.html

<uib-accordion-group heading="Header" is-open="$parent.accordionOpen" ng-click="headerClick()">

应用程序.js

myApp.controller('Controller', ['$scope', function($scope) {

  $scope.accordionOpen = false;

   $scope.$watch('accordionOpen', function(){
    console.log("watch accordionOpen:" +$scope.accordionOpen);
    }, true); 
    console.log("check accordionOpen:" +$scope.accordionOpen);  

  }]);

'检查手风琴打开:' 日志总是打印错误。我尝试将 $scope.accordionOpen 值设置为服务设置方法,但这也不起作用。

笨蛋

打开手风琴后,该图标被启用并使用 ui-router 加载 Page1.html。在 page1.html 中,我试图在显示数据之前检查手风琴是否打开/关闭。

4

1 回答 1

1

您的代码大致相当于以下内容

myApp.controller('Controller', ['$scope', function($scope) {

  $scope.accordionOpen = false;
  console.log("check accordionOpen:" +$scope.accordionOpen);  //moved this line up

  $scope.$watch('accordionOpen', function(){
    console.log("watch accordionOpen:" +$scope.accordionOpen);
  }, true);          

}]);

您设置$scope.accordionOpen = false然后立即记录该值,这就是它始终为假的原因。我不确定您要在这里完成什么,但是您的观察者应该在值发生更改时捕获该值。

从评论更新

因为您使用的是 ui-router,所以最好的办法可能是监听 $stateChangeSuccess 事件并在那里捕获值

myApp.controller('Controller', ['$scope', '$rootScope', function($scope, $rootScope) {

  $scope.accordionOpen = false;      

  $rootScope.$on('$stateChangeSuccess', function(){
    console.log("check accordionOpen:" +$scope.accordionOpen);
    //clear list of accordion elements based on $scope.accordionOpen
  }, true);          

}]);
于 2016-03-24T19:14:39.460 回答