0

当创建一个指令时,同时使用双向绑定使用=定义隔离范围有没有什么办法可以绑定一个范围变量数组。即。如果在我的控制器中有我定义的对象,如$scope.one$scope.two等,并且可以有任意数量的那些 - 我希望指令能够处理它们的可配置数量。我怎么能这样做?AngularJS指令双向绑定一个可配置数量的变量

我不能这样做,因为使用该指令可以有十个另一个控制器,所以我希望它是灵活:

.directive("example", function() { 
    return { 
     scope: { 
      one: "=", 
      two: "=", 
      three: "=" 
     }, 
    ... 
+0

你有'attrs'(属性)对象,但你应该传递一个具有尽可能多的属性的对象,你想要的指令的作用域 - 这是处理这个问题的首选方法 –

+0

你是否需要变量?关闭使用(或)您是否需要使用变量数组来进行双向绑定,以便每次指令中的变量值发生变化时,它都应该反映在主控制器中? – Arkantos

+0

为什么要使用如此多的单个作用域变量而不能作为一个对象传递? – charlietfl

回答

1

当然,它是:

.directive('example', function() { 
    return { 
    scope: { 
     config: '=' 
    }, 
    link: function(scope) { 
     var firstOption = scope.config[0]; 
     var secondOption = scope.config[1]; 
     //... 
    } 
    } 
} 

的数组选项必须存储在一个固定的索引处,所以它的可读性会低于传递一个配置对象对象

.directive('example', function() { 
     return { 
     scope: { 
      config: '=' 
     }, 
     link: function(scope) { 
      var firstOption = scope.config.firstOption; 
      var secondOption = scope.config.secondOption; 
      //... 
     } 
     } 
    } 
+0

更好地使用[angular.extend](https://docs.angularjs.org/ api/ng/function/angular.extend)设置默认值以取消设置默认值,但这是一个很好的答案 –

+0

啊,谢谢,这是有道理的 - 我会用这种方式尝试。 – user648931

+0

@ user648931如果这个答案解决了您的问题,您可以随时将其标记为已接受 –