2013-05-28 71 views
0

我很困惑如何角度更新範圍的屬性。這是我的代碼的一個人爲的版本。我期望$scope.name$scope.open更改時自動更新。ng-click範圍屬性沒有按預期更新

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

我可以在click回調更新$scope.name,但我希望能角度爲我做的。

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

如果你想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/