Angular JS如何在另一个范围变量内更新范围变量

时间:2013-11-17 13:30:10

标签: javascript angularjs

我正在使用对象数组中的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;
  }
});

http://plnkr.co/edit/kF1M1fWyeCcrfcUY3Aqu?p=preview

1 个答案:

答案 0 :(得分:1)

这是一个常见的误解:当您在Javascript 中为变量分配表达式时,只会分配表达式的。不会创建绑定。相反,Angular模板中的表达式会创建绑定。

因此,在您的情况下,$scope.list[2].display会被赋值false,并且不知道该值是如何创建的。

在Angular中执行此操作的正确方法是使用手表:

$scope.$watch("displayThird", function(newval) {
    $scope.list[2].display = newval;
});

这就是Angular在其模板下所做的事情,只需要在Javascript中手动完成。