デバッグできないエラーが発生しました。
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>
<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>
new.html
<h2> New Contact </h2>
<form name='newContact' novalidate class='form-horizontal'>
<form-field record='contact' field='firstName' live='false' required='true'></form-field>
<div class='row form-group'>
<div class='col-sm-offset-2'>
<button class='btn btn-primary' ng-click='save()'> Create Contact </button>
</div>
</div>
</form>
次のエラーが表示されます。
ブラウザで:
エラー:[$ parse:syntax] http://errors.angularjs.org/1.4.1/ $ parse/syntax?p0 =%7B&p1 = invalid%20key&p2 = 2&p3 =%7B%7Bfield% 7D%7D。%24error&p4 =%7Bfield%7D%7D。%24error
On angular site:
エラー:$ parse:syntax構文エラー構文エラー:トークン '{'は、[{field}}。$ error]で始まる式[{{field}}。$ error]の列2の無効なキーです。
誰かが理由を知っていますか?ありがとう!
このエラーは、カスタムディレクティブの属性にデータをバインドするときにも発生します。どこで
$scope.myData.value = "Hello!";
これによりエラーが発生します。
<my-custom-directive my-attr="{{myData.value}}"></my-custom-directive>
しかし、これはうまくいきます:
<my-custom-directive my-attr="myData.value"></my-custom-directive>
あなたの問題はここにあります:
ng-class="{ 'has-error': {{field}}.$dirty && {{field}}.$invalid }"
{{ }}
を削除:
ng-class="{ 'has-error': field.$dirty && field.$invalid }"
ここにも同じ問題があります:
ng-messages='{{field}}.$error'
と置換する:
ng-messages='field.$error'
ただし、これらを修正すると、この行でエラーが発生する可能性が高くなります。
ng-message='{{k}}'
したがって、次のように変更する必要があります。
ng-message='k'
これが私のhtmlだと仮定しましょう
<div ng-controller='MyCtrl' ng-init="array=[{id:1}, {id:2}]">Hi, it's {{name}}.
<div ng-repeat='obj in array'>
The current time is <display-time data="{{array}}"/>.
</div>
</div>
ここでdisplay-time
はカスタムディレクティブで、その定義は次のとおりです
var demo = angular.module('demo', []);
demo.directive('displayTime', function($parse) {
return {
restrict: 'E',
replace: true,
scope: {
data: '='
},
transclude: false,
template: '<span class="currentTime"></span>',
link: function (scope, element, attrs, controller) {
var currentDate = new Date();
console.log(scope.data);
element.text(currentDate.toTimeString());
}
}});
data="{{array}}"
に使用される構文に注意してください。
私はカスタムステートメントのスコープでdata
を使用しているので(ステートメントで
scope: {
data: '='
},
)、
parse error
を取得します
しかし、構文data="array"
を使用し、リンク関数内で次のコードスニペットを使用する場合
scope: {
//data: '='
},
parse error
を取得しません。
したがって、attrs
関数内のlink
パラメーターの一部として構文にアクセスする場合にのみ、構文data="{{array}}"
を使用する必要があります。
私が同じチュートリアルに従っていたときにこの問題が発生しましたが、私の場合の解決策はngMessagesの新しいバージョンを使用していたので、ビデオのbower.jsonファイルを同じバージョンに更新する必要があることを発見しました(バージョン1.4以降ではこの例は機能しません)、すべてが正常に機能し、ここに私の依存関係セクションがあります:
"dependencies": {
"angular": "1.3.9",
"angular-route": "1.3.9",
"angular-resource": "1.3.9",
"angular-messages": "1.3.9",
"bootstrap": "^3.3.6"}