16

ディレクティブのテストを作成しようとしているので、手動で作成してい$compileます。(はい、これには e2e テストを使用できることはわかっていますが、この場合は DOM に依存しないロジックをテストしたいので、単体テストのアプローチを使用しています。)

でバインドしているフィールドがありscope: {foo: '='}ます。ディレクティブのスコープに設定しようとすると、次のエラーが発生します。

Error: Non-assignable model expression: undefined (directive: foo)
    at Error (<anonymous>)
    at $get.parentSet (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:4146:25)
    at Object.<anonymous> (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:4160:23)
    at Object.$get.Scope.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:7693:38)
    at Object.$get.Scope.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:7894:24)
    at SNAKE_CASE_REGEXP (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:930:13)
    at Object.invoke (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:2788:25)
    at bootstrap (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:928:12)
    at angularInit (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:904:5)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:14397:5 

このフィドルで再現。

4

2 に答える 2

25

ディレクティブには次のものがあります。

scope: {
   bar: '='
}

これは、ディレクティブ要素 ( <div foo></div>) で属性名「bar」を探し、ディレクティブと属性に指定されたオブジェクト内で双方向のデータバインディングを行うことを意味します。したがって、最初にbar属性を追加する必要があり、次に属性の値の名前を使用してスコープに何かを設定する必要があります。http://jsfiddle.net/u4BTu/6/を参照してください

于 2012-11-27T23:18:27.157 に答える
0

このエラーの別の考えられる原因は、Angular の属性の正規化を考慮していないことです。たとえば、次のディレクティブがあるとします。

<my-directive parameter-one="foo" parameter_two="bar"></my-directive>

このスコープ宣言では:

scope: {
  'parameter-one': '=',
  parameter_two: '=',
}

このエラーが発生します。修正するには、スコープ宣言に正規化されたバージョンを使用します。

scope: {
  parameterOne: '=',
  parameterTwo: '=',
}
于 2015-06-26T06:26:34.430 に答える