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" />