【问题标题】:Filter ng-repeat by a property in the current scope按当前范围内的属性过滤 ng-repeat
【发布时间】:2015-06-09 19:12:31
【问题描述】:

我尝试了以下方法(在指令加载的模板中):

<li ng-repeat="lang in languages | filter: { Culture: '!{{currentLanguage}}'}">

这不起作用,所有语言都被渲染

<li ng-repeat="lang in languages | filter: { Culture: !currentLanguage}">

这不起作用,没有呈现任何语言

语言有一个属性“文化”。 currentLanguage(在范围内)解析为“en-CA”(当我在 Chrome 开发工具中查看元素时,我可以看到这个绑定)。我希望返回除“en-CA”之外的所有语言。如果不创建自定义过滤器,这可能吗?

【问题讨论】:

  • Culture: !{{currentLanguage}} 应该是 Culture: !currentLanguage
  • 正确。不需要使用带有过滤器的插值大括号
  • 修改了我的问题...
  • 您可以尝试改用filter: { Culture: '!en-CA'} 吗?只是为了测试

标签: javascript html angularjs angularjs-filter


【解决方案1】:

AngularJS 过滤器接受一个表达式,而您提供的是一个插值

在 HTML 模板绑定中

{{ filter_expression | filter : expression : comparator}}

尝试更改为以下...

<li ng-repeat="lang in languages | filter: { Culture: !currentLanguage }">

查看AngularJS filter docs了解更多信息


如果您需要一些自定义代码来解决这个问题,一个更复杂的解决方案可能包括...

<li ng-repeat="lang in languages | filter: languageFilter">{{ lang.name }}</li>

$scope.languages = [{'name': 'en-US'}, {'name': 'en-CA'}]

$scope.currentLanguage = 'en-CA';

$scope.languageFilter = function(language) {
    return language.name != $scope.currentLanguage; // en-US
}

JSFiddle Link - 工作示例

【讨论】:

  • currentLanguage 变量来自我的指令。我发布的 html 在指令的模板中。这可能是问题吗?
  • @FiveTools 我尝试了一种可以解决此问题的替代方法。看看然后告诉我?
【解决方案2】:
<li  ng-repeat="lang in languages | filter:{ Culture: '!en-CA'}" >

<li  ng-repeat="lang in languages | filter:{ Culture: !currentLanguage}" >

【讨论】:

  • currentLanguage 变量来自我的指令。我发布的 html 在指令的模板中。这可能是问题吗?
猜你喜欢
  • 2014-10-20
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2020-01-20
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多