$观察变化的变化angularjs

$观察变化的变化angularjs

问题描述:

我是新来的复杂角度指令。我在rootScope中有一个名为$root.page的变量。我已成立了一个手表就像这样:

$scope.$watch(
    "$root.page", 
    function handleChange(newValue, oldValue) { 
    //show the select page only on page change 

    console.log(oldValue, newValue); 

    if (!oldValue || oldValue !== newValue) { 
     $scope.showSelectOnly = true; 
    } 
    } 
); 

目前我的代码是结构化的方式,$scope.showSelectOnly始终是真实的。我只想$scope.showSelectOnly$root.page发生变化时为真,我希望它在所有其他情况下都是错误的(即当变量$root.page没有变化时)。

+0

有关添加else语句和分配假值是什么$范围.showSelectOnly? – chaoticmind

+0

我从字面上试图2分钟前,它的工作。我没有意识到''watch watch''就是这样工作的,你也可以检查'non-changes'。我猜这是$手表ng-change的情况吗? – devdropper87

+0

我很快就说过了 - 那没有用 – devdropper87

我不认为你需要这种情况下的手表。你可能想用角度值来代替。您可以在整个角度模块应用程序中访问角度值。通过这一点,您可以在更改页面时更新showSelectOnly。

angular.module('myApp', []) 
    .value('page', true) 
    .value('showSelectOnly', true); 

然后,您可以将页面注入模块中的任何控制器,并根据需要更新这两个值。

angular.module('myApp') 
    .controller('myCtrl', function (page, showSelectOnly) { 
     if (!page) { 
     showSelectOnly = true; 
     } 
    }); 
+0

我相信这个值应该是一个带有“page”和“showSelectOnly”键的散列值,否则他们将不得不通过一个相当间接的过程来改变构造存储在值中。 – jusopi

这里是你需要的代码:

demo

HTML:

<div ng-app="app" ng-controller='myCtrl as vm'> 

    <button ng-click="$root.page = 1">Change root Page</button> 
    <label> 
    showSelectOnly: {{showSelectOnly}} 
    </label> 

</div> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script> 

的javascript:

angular.module('app', []) 
.controller('myCtrl', function($scope) { 
    var vm = this; 
    $scope.showSelectOnly = false; 

    $scope.$watch(
    "$root.page", 
    function handleChange(newValue, oldValue) { 
     if (newValue !== oldValue) { 
     $scope.showSelectOnly = true; 
     } 
    } 
); 
}) 
+0

你的演示复制我的问题:)我点击一次按钮,它永远保持真实,一旦没有变化,它不会回到假 – devdropper87

+0

第一个状态是假的,然后你点击按钮状态变化,它设置为true。如果再次点击完成,您是否希望将其更改为false? –

+0

是的,正如我在我的问题中提到的,我希望它在所有其他情况下都是错误的(即,当$ root.page变量没有改变时)。 – devdropper87