我需要在其模板中创建一个ng-repeat
的指令,并且ng-repeat应该使用属性中设置的内容,或者如果属性不存在则使用“default array”
类似的东西:
app.directive 'myDir',->
template:'<div> <h1 ng-repeat="d in data"> {{d}} </h1> </div>'
scope:
data:"="
link: (scope, element, attrs)->
unless attrs.data?
$scope.data = [1..10]
除了没有真正起作用,抛出“不可分配的表达式”错误。
如何让它发挥作用?
我可能会尝试使用$ parse但是我将不得不重新编译该指令?我想要的似乎是微不足道的,不应该太难以使它工作,对吗?
答案 0 :(得分:1)
来自$compile
documentation for "="
:
如果父作用域属性不存在,则会抛出NON_ASSIGNABLE_MODEL_EXPRESSION异常。你可以使用=?避免这种行为?或=?attr以便将属性标记为可选。
您应将范围设置为:
scope: {
data: "=?"
}
OFF TOPIC:您还可以在模板中直接定义默认值:
template: '<div> <h1 ng-repeat="d in (data || [1, 2, 3])"> {{d}} </h1> </div>'
答案 1 :(得分:0)
解决了这个问题:
app.directive 'myDir',($parse)->
restrict:'E'
template:'<div> <h1 ng-repeat="d in data.headers"> {{d}} </h1> </div>'
link: (scope, element, attrs)->
scope.data = {}
if attrs.headers?
scope.data.headers = $parse(attrs.headers)(scope)
else
scope.data.headers = [1..10]
但是New Dev
的解决方案要好得多