我收到以下错误
语法错误:表达式[{{field}}。$ error]第2列的令牌'{'无效键,从[{field}}开始。$ error]。
当我尝试运行以下代码(form-field.html)
时<div class='row form-group' ng-form="{{field}}" ng-class="{ 'has-error': {{field}}.$dirty && {{field}}.$invalid }">
<label class='col-sm-2 control-label'> {{ field | labelCase }} <span ng-if='required'>*</span></label>
<div class='col-sm-6' ng-switch='required'>
<input ng-switch-when='true' ng-model='record[field][0]' type='{{record[field][1]}}' class='form-control' required ng-change='update()' ng-blur='blurUpdate()' />
<div class='input-group' ng-switch-default>
<input ng-model='record[field][0]' type='{{record[field][1]}}' class='form-control' ng-change='update()' ng-blur='blurUpdate()' />
<span class='input-group-btn'>
<button class='btn btn-default' ng-click='remove(field)'><span class='glyphicon glyphicon-remove-circle'></span></button>
</span>
</div>
</div>
***PROBLEM CODE LINE BELOW***
<div class='col-sm-4 has-error' ng-show='{{field}}.$dirty && {{field}}.$invalid' ng-messages='{{field}}.$error'>
<p class='control-label' ng-message='required'> {{ field | labelCase }} is required. </p>
<p class='control-label' ng-repeat='(k, v) in types' ng-message='{{k}}'> {{ field | labelCase }} {{v[1]}}</p>
</div>
</div>
这是在以下代码中替换指令的代码:
<form-field record='contact' field='firstName' live='false' required='true'></form-field>
问题显然是Angular不喜欢ng-messages={{field}}.$error
而我可以通过将其更改为
ng-messages='field.$error'
但是下一段中的错误消息不会显示。 此代码来自TutsPlus,从2014年9月发布的Angularjs开始构建Web应用程序。
答案 0 :(得分:3)
您遇到此错误的原因是您可能正在使用 angular version 1.4.1 ;如果你使用bower安装角度消息来跟踪教程,你也安装了angular-messages 1.4.1。 因为在 angular-messages 1.4.1 中,ng-messages不再正确地解释其属性值(即angular.js github上的 issue#11616 )
我从@gkalpak学到的解决方案是:
<div class='col-sm-4 has-error' ng-show='{{field}}.$dirty && {{field}}.$invalid' ng-messages="this.$eval(field)['$error']">
答案 1 :(得分:1)
删除ng-show
和ng-messages
中的双花括号,你不需要它们,因为它们都需要表达式。
这应该有效:
<div class='col-sm-4 has-error'
ng-show='field.$dirty && field.$invalid'
ng-messages='field.$error'>