语法错误:ng messages='{{字段}}$错误'

Syntax error : ng-messages='{{field}}.$error'

本文关键字:错误 字段 ng 语法 messages      更新时间:2023-09-26

我得到以下错误

语法错误:表达式〔{{field}}.$Error〕第2列的令牌"{"无效键,从〔{field}}.$Error〕开始。

当我尝试运行以下代码(表单字段.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'

但是随后不会显示下一段中的错误消息。此代码来自2014年9月发布的TutsPlus使用Angularjs从头开始构建Web应用程序。

出现此错误的原因是您可能使用的是angular版本1.4.1;如果您按照教程使用bower-installangular messages,那么您也安装了angular message1.4.1。因为在angular messages 1.4.1中,ng messages不再正确解释其属性值(即angular.js github上的问题#111616


我从@gkalpak那里学到的解决方案是:

<div class='col-sm-4 has-error' ng-show='{{field}}.$dirty && {{field}}.$invalid' ng-messages="this.$eval(field)['$error']">

删除ng-showng-messages中的双大括号,您不需要它们,因为它们都需要一个表达式。

这应该有效:

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