$观察变化的变化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
没有变化时)。
我不认为你需要这种情况下的手表。你可能想用角度值来代替。您可以在整个角度模块应用程序中访问角度值。通过这一点,您可以在更改页面时更新showSelectOnly。
angular.module('myApp', [])
.value('page', true)
.value('showSelectOnly', true);
然后,您可以将页面注入模块中的任何控制器,并根据需要更新这两个值。
angular.module('myApp')
.controller('myCtrl', function (page, showSelectOnly) {
if (!page) {
showSelectOnly = true;
}
});
我相信这个值应该是一个带有“page”和“showSelectOnly”键的散列值,否则他们将不得不通过一个相当间接的过程来改变构造存储在值中。 – jusopi
这里是你需要的代码:
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;
}
}
);
})
你的演示复制我的问题:)我点击一次按钮,它永远保持真实,一旦没有变化,它不会回到假 – devdropper87
第一个状态是假的,然后你点击按钮状态变化,它设置为true。如果再次点击完成,您是否希望将其更改为false? –
是的,正如我在我的问题中提到的,我希望它在所有其他情况下都是错误的(即,当$ root.page变量没有改变时)。 – devdropper87
有关添加else语句和分配假值是什么$范围.showSelectOnly? – chaoticmind
我从字面上试图2分钟前,它的工作。我没有意识到''watch watch''就是这样工作的,你也可以检查'non-changes'。我猜这是$手表ng-change的情况吗? – devdropper87
我很快就说过了 - 那没有用 – devdropper87