2

我有一个ng-repeat块,用它我正在写一个ng-click,并将直接表达式设置为$ scope变量为true。 。但它不工作..有人可以plz帮助..这里是plnkrng-click不能用直接表达式(不是函数)

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' 
     } 
    ] 
    } 
}); 

现在我有一个解决方法,它有一个函数调用它的点击并设置所需的变量,但很想知道什么是错误的另一种方法?

+0

应该有一个像$ parent.selected,只有选择没有任何意义 – argentum47 2015-04-01 08:09:21

回答

4

使用$父,因为NG重复创造它自己的范围

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

Plunker

+0

$父母做的伎俩,标记为答案,因为它是接近我的概率匹配..提供的其他解决方案也适用。 。 感谢大家.. – narcs 2015-04-01 08:52:51

2

它的工作,但由于ngRepeat的,选择被绑定到新的范围。您可以代替对象放选择,所以它不会对孩子作用域的新选择属性:

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

$scope.selectedObj = { selected: false }; 

检查这个plunker

0

试试这个:

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

plnkr

什么情况是,孩子作用域获取其自身的属性,隐藏/阴影的同名parent属性。这不是AngularJS正在做的 - 这是JavaScript原型继承的工作原理。

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

0

只需使用$父范围,就像这样:

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

在NG-repat每个项目都有自己的范围。

相关问题