我有两个数据列表,根据所选值(语言)显示。当我更改语言时,ng-show没有正确更新。
我已经尝试调用$ scope.apply(),但它不起作用。
这是plunkr
$scope.languageChanged = function() {
console.log('change' + vm.currentLanguage);
$scope.$apply();
}
答案 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>
答案 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">