Angularjs 两个指令共享同一个控制器
具有以下指令的Angularjs 两个指令共享同一个控制器,angularjs,angularjs-directive,Angularjs,Angularjs Directive,具有以下指令的 function directive() { return { template: '{{foo.name}}', controller: ctrl, controllerAs: 'foo' } } function ctrl($attrs) { this.name = $attrs.name; } 在一个模板中: <directive name="1" /> <directive na
function directive() {
return {
template: '{{foo.name}}',
controller: ctrl,
controllerAs: 'foo'
}
}
function ctrl($attrs) {
this.name = $attrs.name;
}
在一个模板中:
<directive name="1" />
<directive name="2" />
而不是
1
2
?您必须隔离范围:
查看解释选项
controllerAs:'foo'
执行以下操作:
$scope.foo = new ctrl()
您的指令没有指定范围
,这意味着您的指令使用来自其父级的范围($parentScope
)在您的情况下,两个指令实例使用相同的父作用域。因此,两个指令:
<directive name="1" />
<directive name="2" />
工作方式如下:
:$parentScope.foo=new ctrl()
。控制器内部:$parentScope.foo.name=1
:$parentScope.foo=new ctrl()
。(步骤1中的实例被覆盖)。控制器内部:$parentScope.foo.name=2
名称
解决方案:使用隔离作用域作为。很好地解释了为什么需要隔离作用域,不仅是因为需要隔离作用域,而且当我在input
元素中使用am attribute指令时,如何使用隔离作用域?我得到了一个错误:
$scope.foo = new ctrl()
<directive name="1" />
<directive name="2" />