ng-switch中的值未更新

时间:2015-10-26 12:06:34

标签: angularjs

我使用ng-switch来更改ui-sref的值,但似乎它没有工作,因为值没有更新。 初始值为false,然后保留它。

Html:

<div ng-switch on="result">
    <div ng-switch-when=false ui-sref="gotest" class="gotest-button"></div>
    <div ng-switch-when=true ui-sref="menu" class="gotest-button"></div>
</div>

AppCtrl:

$scope.result=angular.isDefined(window.localStorage['result']);

你能告诉我什么是错的吗?

由于

1 个答案:

答案 0 :(得分:2)

  

$ scope.result = angular.isDefined(window.localStorage [ '结果']);   

AppCtrl中的

代码运行一次,将结果值设置为false,这就是全部。 你没有任何观察者。 你可以:

  • 手动添加观察者

    function getResultValue() {
       return angular.isDefined(window.localStorage['result'])
    }
    
    $scope.$watch(getResultValue, function(newValue) {
     $scope.result = newValue;
    });
    
  • 在您的视图中调用函数:

    // controller code: $scope.getResultValue = getResultValue // as in previous example

    // view
    <div ng-switch on="getResultValue()">
        <div ng-switch-when=false ui-sref="gotest" class="gotest-button"></div>
        <div ng-switch-when=true ui-sref="menu" class="gotest-button"></div>
    </div>
    

与摘要周期集成的服务也可以完成这项工作。
你可以在这里阅读关于观察者的信息: https://docs.angularjs.org/api/ng/type/$rootScope.Scope

更新
我做了一些误导性的假设。 要对变化作出反应,您需要将它们整合到角度消化循环中。 我的例子只有在某些东西开始消化时才有用。 ngClick指令,$ interval服务或其他。
间隔示例:http://jsfiddle.net/joshdmiller/hb7lu/

  

我真的不明白为什么在监视功能中添加newValue而不在控制器代码中使用,请解释一下

控制器中的代码运行一次。观察者中的代码将运行每个摘要。 (之后将在您的视图中评估角度表达式)

例如:
0.初始状态:localStorage ['result']未定义
1.应用程序启动,消化被调用,第一个ng-swith分支
2.某些东西改变了localStorage ['result']值,现在已经定义了 摘要称之为对某事的反应 所有观察者都被称为 5.如果某个观察者更改了$ scope.result值,则会得到第二个ng-switch