我正在尝试为指令编写测试,所以我用$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
转载于此fiddle。
答案 0 :(得分:25)
在你的指令中你有:
scope: {
bar: '='
}
这意味着它将在指令元素(<div foo></div>
)上查找属性名称“bar”,并在指令和为该属性指定的对象中执行双向数据绑定。因此,首先需要添加bar
属性,然后需要在范围中设置一些具有属性值名称的内容。见http://jsfiddle.net/u4BTu/6/
答案 1 :(得分:0)
此错误的另一个可能原因是忽略了Angular的normalization属性。例如,如果您有以下指令:
<my-directive parameter-one="foo" parameter_two="bar"></my-directive>
使用此范围声明:
scope: {
'parameter-one': '=',
parameter_two: '=',
}
你会收到这个错误。要更正,请使用范围声明的规范化版本:
scope: {
parameterOne: '=',
parameterTwo: '=',
}