ng-click与ng-repeat不使用直接表达式(不是函数)

时间:2015-04-01 08:05:14

标签: javascript angularjs angularjs-ng-repeat angularjs-ng-click

我正在使用ng-repeat块并且使用它我正在编写一个ng-click,其中直接表达式将$ scope变量设置为true ..但它不起作用..可以有人PLZ帮助..这里是plnkr

HTML

selected: {{selected}}
    <ul>
      <li ng-repeat="t in t.header" ng-click="selected = true;">{{t.a1}}</li>
    </ul>

JS

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.selected = false;
  $scope.t = {
    header: [
      {
        a1:'a1'
      },
      {
        a1:'a1'
      }
    ]
  }
});

现在我有一个解决方法是对其点击进行函数调用并设置所需的变量,但很想知道其他方法有什么问题吗?

4 个答案:

答案 0 :(得分:4)

使用$ parent,因为ng-repeat创建了自己的范围

<li ng-repeat="t in t.header" ng-click="$parent.selected = true;">{{t.a1}}</li>

Plunker

答案 1 :(得分:2)

它正常工作,但由于ngRepeat,所选的绑定到新范围。您可以将selected放在对象中,因此它不会在子范围上创建新的selected属性:

<li ng-repeat="t in t.header" ng-click="selectedObj.selected = true;">{{t.a1}}

$scope.selectedObj = { selected: false };

选中plunker

答案 2 :(得分:0)

试试这个:

//$scope.selected = false;
  $scope.model = {};
  $scope.model.selected = false;

plnkr

子作用域会获得自己的属性来隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情 - 这就是JavaScript原型继承的工作原理。

为了更好地理解: https://github.com/angular/angular.js/wiki/Understanding-Scopes

答案 3 :(得分:0)

只需使用$ parent范围,如下所示:

<li ng-repeat="t in t.header" ng-click="$parent.selected = true;">

ng-repeat中的每个项目都有自己的范围。