语法错误:ng-messages ='{{field}}。$ error'

时间:2015-06-24 08:27:19

标签: angularjs

我收到以下错误

语法错误:表达式[{{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应用程序。

2 个答案:

答案 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-showng-messages中的双花括号,你不需要它们,因为它们都需要表达式。

这应该有效:

<div class='col-sm-4 has-error' 
    ng-show='field.$dirty && field.$invalid'
    ng-messages='field.$error'>