0

我对角度如何更新范围上的属性感到困惑。这是我的代码的人为版本。我希望在更改$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.nameclick回调中更新,但我希望 Angular 可以为我做到这一点。

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

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

4

1 回答 1

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/

于 2013-05-28T13:59:16.533 回答