我正在使用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'
}
]
}
});
现在我有一个解决方法是对其点击进行函数调用并设置所需的变量,但很想知道其他方法有什么问题吗?
答案 0 :(得分:4)
使用$ parent,因为ng-repeat创建了自己的范围
<li ng-repeat="t in t.header" ng-click="$parent.selected = true;">{{t.a1}}</li>
答案 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;
子作用域会获得自己的属性来隐藏/隐藏同名的父属性。这不是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中的每个项目都有自己的范围。