我正在使用对象数组中的ng-repeat来建立列表。数组中的一个属性是一个布尔值,它将使用此数组进行ng-show我正在构建的每个元素。数组本身也是一个范围变量。
现在我只想更新display属性。有可能吗?
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.displayThird = false;
$scope.list = [
{
text: "One",
display: true
},
{
text: "Two",
display: true
},
{
text: "Three",
display: $scope.displayThird
},
{
text: "Four",
display: true
}
];
/* I want this function to update my display property */
$scope.display = function() {
$scope.displayThird = true;
}
});
答案 0 :(得分:1)
这是一个常见的误解:当您在Javascript 中为变量分配表达式时,只会分配表达式的值。不会创建绑定。相反,Angular模板中的表达式会创建绑定。
因此,在您的情况下,$scope.list[2].display
会被赋值false
,并且不知道该值是如何创建的。
在Angular中执行此操作的正确方法是使用手表:
$scope.$watch("displayThird", function(newval) {
$scope.list[2].display = newval;
});
这就是Angular在其模板下所做的事情,只需要在Javascript中手动完成。