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 回答