我对范围内角度更新属性的方式感到困惑。这是我的代码的一个人为的版本。我预计$scope.name
会在$scope.open
更改时自动更新。
查看
<div ng-app>
<div ng-click="click()" ng-controller="MyCtrl">{{name}}</div>
</div>
控制器
var MyCtrl = function ($scope) {
if (typeof $scope.open === 'undefined') {
$scope.open = true;
}
$scope.name = $scope.open ? "ilia" : "choly";
$scope.click = function () {
$scope.open = !$scope.open;
};
};
我可以在$scope.name
回调中更新click
,但我希望有角度可以为我做到这一点。
var MyCtrl = function ($scope) {
if (typeof $scope.open === 'undefined') {
$scope.open = true;
$scope.name = "ilia";
}
$scope.click = function () {
$scope.open = !$scope.open;
$scope.name = $scope.open ? "ilia" : "choly";
};
};
我做错了什么,或者这是预期的行为?
答案 0 :(得分:4)
如果您想在name
更改后自动更新open
,可以使用$watch
:
每当watchExpression发生更改时,都会注册要执行的侦听器回调。
像这样:
var MyCtrl = function ($scope) {
$scope.$watch('open', function () {
$scope.name = $scope.open ? "ilia" : "choly";
});
$scope.open = typeof $scope.open === 'undefined' ? true : $scope.open;
$scope.click = function () {
$scope.open = !$scope.open;
};
};