ng-click范围属性未按预期更新

时间:2013-05-28 13:54:32

标签: data-binding angularjs angularjs-ng-click

我对范围内角度更新属性的方式感到困惑。这是我的代码的一个人为的版本。我预计$scope.name会在$scope.open更改时自动更新。

jsfiddle

查看

<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,但我希望有角度可以为我做到这一点。

jsfiddle

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";
    };
};

我做错了什么,或者这是预期的行为?

1 个答案:

答案 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;
    };
};

工作示例:http://jsfiddle.net/hbpYK/