Ng-show未在ng-repeat中更新

时间:2016-04-21 14:14:43

标签: angularjs

我有两个数据列表,根据所选值(语言)显示。当我更改语言时,ng-show没有正确更新。

我已经尝试调用$ scope.apply(),但它不起作用。

这是plunkr

$scope.languageChanged = function() {
  console.log('change' + vm.currentLanguage);
  $scope.$apply();
}

3 个答案:

答案 0 :(得分:3)

ng-show需要一个表达式,而不是字符串,因此您不需要插值双括号。

不正确:ng-show="{{translation.language === vm.currentLanguage}}"

正确:ng-show="translation.language === vm.currentLanguage"

答案 1 :(得分:3)

@Hugo Wood对于ngShow问题的解决方案是正确的。我可以提出一个可能更清洁的解决方案。您可以使用过滤器首先渲染必要的项目,而不是隐藏/显示:

<h1>Selected</h1>
<div ng-repeat="translation in vm.translations | filter:{language: vm.currentLanguage}">
  <div>{{translation.language}}:
    <input ng-model="vm.translations[$index].text" /> show: {{translation.language === vm.currentLanguage}} 
  </div>
</div>
<br />
<br />
<h1>Not Selected</h1>
<div ng-repeat="translation in vm.translations | filter:{language: '!' + vm.currentLanguage}">
  <div>{{translation.language}}:
    <input ng-model="vm.translations[$index].text" /> show:{{translation.language !== vm.currentLanguage}} 
  </div>
</div>

演示: http://plnkr.co/edit/F35yrDv9HcV6hChIDBkZ?p=preview

答案 2 :(得分:2)

您需要更改将表达式提供给ng-show的方式。删除&#39; {{&#39;并尝试。以下是您提供商的更新plunkr

<div ng-repeat="translation in vm.translations" ng-show="translation.language === vm.currentLanguage">

<div ng-repeat="translation in vm.translations" ng-show="translation.language !== vm.currentLanguage">