Javascript 错误:$parse:语法错误

Javascript 错误:$parse:语法错误,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,这个错误快把我逼疯了,我需要帮助 语法错误:表达式第2列的标记“{”无效键[{{ 从[{field}}.$error]开始的字段}.$error] form-field.html list.html {{field | labelCase}} {{contact[field][0]} 在我看来,没有语法错误。知道为什么会这样吗 缺少了一些东西,因为我没有看到从list.html实例化的指令,所以我们无法在这里了解整个情况 考虑到这一点,您在form-field.html中使用{field}

这个错误快把我逼疯了,我需要帮助

语法错误:表达式第2列的标记“{”无效键[{{ 从[{field}}.$error]开始的字段}.$error]

form-field.html list.html

{{field | labelCase}} {{contact[field][0]}

在我看来,没有语法错误。知道为什么会这样吗

缺少了一些东西,因为我没有看到从list.html实例化的指令,所以我们无法在这里了解整个情况

考虑到这一点,您在form-field.html中使用{field}的方式很奇怪:指令接收field='@',这意味着它是一个字符串,但在form-field.html中,您试图将它用作对象。查看$compile上的文档,该文档非常好地解释了如何将参数传递到指令的独立作用域


$compile

当第一次计算
{field}.$error
时,
{field}
尚未插值,因此Angular将第一个{解释为对象声明的开始,第二个作为键。在第一次摘要循环之后,它工作,因为它已被插值为
任何值。$error


绝对没有必要使用
{field}
。使用
ng form=“form”
,将
{{field}}
替换为
form
,并从
remove()
中删除参数(不需要双关语)。表单对象的名称完全不相关。

{}中包装代码时
在html模板中,它告诉angular它需要以angular表达式的形式运行该模板的内容。但是,如果将其放在已经是angular表达式的内容中,它会将其视为代码,并抛出语法错误,因为它不是有效的javascript。以
ng-
开头的属性将被视为角度表达式。那么你有:

<div class='row form-group' ng-form="{{ field }}" ng-clase="{ 'has-error': {{ field }}.$dirty && {{ field }}.$invalid }">
我用这个复制了你的错误,并用这个修复了它

编辑:事实上,那一行不是导致错误的原因,因为int
ng clase
类型导致表达式被忽略。我认为导致错误的那一行是:

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

可以用类似的方式固定:

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


它是
ng类
不是ng类:-)为什么需要动态命名
ng表单
?我想,我强调认为,它与ng消息如何计算{field}.$error有关。您希望它做的是计算field变量,添加“$error”然后计算整个表达式以确定您有什么错误。坦率地说,使用动态名称(字段)对我来说很陌生,如果{field}.$dirty和{field}.$invalid在本质上不能正常工作,我也不会感到惊讶,因为您在ng message属性中的表达式会忽略它,并且不会进行计算{{field}。这会导致ng message使用“{field}.$error”作为键名,但不允许使用{字符,从而导致错误。我确实做了您要求我做的更改,现在一切正常。但我如何知道下次我必须使用
ng form=“form”
相反?这是从哪里来的?@siaw23
formField
指令有一个独立的作用域。这意味着它内部定义的所有内容都保留在它内部。
ng form=“whatever”
意味着一个对象以
whatever
的名称放入这个隔离的范围。因为每个
表单字段都有自己的
whatever
,所以不需要不同的名称。谢谢:)。不过我有一个问题。我是angularjs的新手。angularjs目前有1.4和2.0版本。您建议哪一个版本e我是否花时间学习?@siaw23这是一个非常主观的问题,也取决于许多变量。请记住,大多数第三方组件仅适用于1.x。现有项目也将适用于1.x。另一个重要因素是2.0适用于较新的浏览器,最好与需要预处理的TypeScript或ES6一起使用处理。由于您不熟悉Angular,我现在宁愿从1.4开始,使用2.0样式,即在组件中思考,使用
控制器作为
语法等(基本上:遵循样式指南和最佳实践).wow!你说服了我。谢谢你提供的信息和建议。我坚持使用1.4。谢谢。我还不能玩打字脚本。
ng form=“field”
会破坏
record[field][0]
“以ng开头的属性将被视为角度表达式”不正确。这些属性和内容本身都不会被视为表达式。
<div class='row form-group' ng-form="{{ field }}" ng-clase="{ 'has-error': {{ field }}.$dirty && {{ field }}.$invalid }">
<div class='row form-group' ng-form="field" ng-class="{ 'has-error': field.$dirty && field.$invalid }">
 <div class='col-sm-4 has-error' ng-show='{{ field }}.$dirty && {{ field }}.$invalid' ng-messages='{{ field }}.$error'>
<div class='col-sm-4 has-error' ng-show='field.$dirty && field.$invalid' ng-messages='field.$error'>