Javascript ng在ng重复中单击
在AngularJS中,我有一组颜色,它们有Javascript ng在ng重复中单击,javascript,angularjs,Javascript,Angularjs,在AngularJS中,我有一组颜色,它们有标题和类型。我将所有颜色显示为一个列表 <ul> <li> <a href="" ng-click="search.type = 'primary';"> Primary </a> </li> </ul> 现在我想添加一个菜单,允许用户选择仅显示特定类型的颜色。为此,我有另一个包
标题
和类型
。我将所有颜色显示为一个列表
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
现在我想添加一个菜单,允许用户选择仅显示特定类型的颜色。为此,我有另一个包含colortypes的数组。这也显示为一个列表
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
现在,我想单击一个颜色类型,将颜色列表缩小为仅包含选定的color.type
的颜色。为此,我使用了一个过滤器:
<ul>
<li ng-repeat="color in colors | filter:search">
{{ color.title }}
</li>
</ul>
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
-
{{color.title}}
使用手动颜色类型列表,一切正常:
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
-
但是,当我使用如上所述的颜色类型数组时,单击不起任何作用:
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
<ul>
<li ng-repeat="colortype in colortypes">
<a href="" ng-click="search.type = '{{ colortype.title }}';">
{{ colortype.title }}
</a>
</li>
</ul>
-
我想这与ng重复中的ng点击有关(或者可能是=
分配的范围)?如何解决此问题?在ngClick
指令中,您指定的不是JS代码,而是表达式
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
因此,您只需使用
即可(注意:{{}
无插值)由于ng repeat
创建子作用域,ng click
引用的是子作用域,而不是控制器的作用域。这里有两种方法可以解决这个问题
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
1)一种快速而肮脏的方法是使用$parent
访问原始作用域
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
将您的ng单击更改为类似以下内容:
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>
<a href="#" ng-click="$parent.search.type = colortype.title;">
{{ colortype.title }}
</a>
不,它不起作用。即使使用search.type='primary'
,如果将它放在ng repeat
中,它也不会工作。正如我所说,我认为这可能是一个作用域问题?在控制器中初始化$scope.search={}
,使search
对象可用于ngRepeat
创建的子作用域。刚刚在plnkr上进行了测试,它可以正常工作(如果您仍然不能这样做,我可以再次创建plnkr)。不要忘记,AngularJS使用原型继承
,所以如果父范围中有搜索
对象,表达式将使用它。如果否,则它将在每个子作用域中创建新对象,由ngRepeat
创建。
<ul>
<li>
<a href="" ng-click="search.type = 'primary';">
Primary
</a>
</li>
</ul>