14

このプランカーに関するフォローアップとして:

プランカー

子 1 の項目を選択するときに Chrome でコンソールを確認すると、次のエラーが表示されます。

エラー: 割り当て不可能なモデル式: 未定義 (ディレクティブ: childOne)

ディレクティブ要素は属性ではなく要素であり、ディレクティブ自体でそのように指定されているため、私は完全に困惑しています。

4

2 に答える 2

22

TL;DR; - 問題は、属性がスネークケースであり、スコープ定義がそれらをcamelCaseに変換することです。

さて、あなたは持っています:

app.directive('childOne', function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            labelName: "@",
            selectPhrase: "@",
            ngModel: "=",
            options: "=",
        },
        template: '<span><div class="local-label">{{labelName}}: </div><div style="width:15px;display:inline-block;"></div>' +
                  '<span style="display: inline-block;"><select ng-model="ngModel" ng-options="o.Id as o.Name for o in options | orderBy:\'Name\'" class="formRequire" required><option value="" selected="selected">{{selectPhrase}} ...</option></select>' +
                  '</span></div></span>'
    };
})

問題は、ngModel をバインドすることですが、child-one 要素がその値を提供しないことです。その部分にコメントすると、うまくいくようです。

スコープに「=」バインディングがある場合、必須であることを意味するようです。また、属性は、javascript の世界で定義されると、スネークケースからキャメルケースに変換されます。

PS: エラーが少しあいまいであることは事実です

于 2013-04-30T15:59:06.253 に答える
3
<child-one 
      label-name="Child 1" select-phrase="Please Select Clutch Type" 
      selectModel="ClutchType.Id" options="clutchTypes" >
</child-one> 


selectModel="ClutchType.Id" 

になるはずだった

select-model="ClutchType.Id"
于 2013-04-30T15:59:35.310 に答える