带有默认数据的指令

时间:2015-01-27 20:41:32

标签: angularjs

我需要在其模板中创建一个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]

除了没有真正起作用,抛出“不可分配的表达式”错误。

jsbin here

如何让它发挥作用?

我可能会尝试使用$ parse但是我将不得不重新编译该指令?我想要的似乎是微不足道的,不应该太难以使它工作,对吗?

2 个答案:

答案 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的解决方案要好得多