Angular Directives基于属性的模板变量

A23*_*A23 3 javascript angularjs

我有一个生成Box div的指令.

/template/boxes.html

<box index=0></box>
<box index=1></box>
Run Code Online (Sandbox Code Playgroud)

/box.js

app.controller('BoxController', ['$scope', function ($scope) {

 $scope.boxIndex = false;

}]);

app.directive('box', function () {

    return {
     restrict: 'E',
     templateUrl: '/partials/_box.html',
     link: function (scope, element, attrs) {
      scope.boxIndex = attrs.index;
     }
    }

});
Run Code Online (Sandbox Code Playgroud)

/partials/_box.html

<div class="box{{boxIndex}}"></div>
Run Code Online (Sandbox Code Playgroud)

我得到了输出

<div class="box1"></div>
<div class="box1"></div>
Run Code Online (Sandbox Code Playgroud)

代替

<div class="box0"></div>
<div class="box1"></div>
Run Code Online (Sandbox Code Playgroud)

我还应该做些什么来使两个实例分开吗?

Mar*_*ine 5

您的指令都共享父控制器的作用域,因此访问相同的值.由于您使用的是插值,它们都会更新为最后一个设定值.

使用scope: truescope: {}代替:

app.directive('box', function () {
    return {
        restrict: 'E',
        scope: {}, // or scope: true
        templateUrl: '/partials/_box.html',
        link: function (scope, element, attrs) {
            scope.boxIndex = attrs.index;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

演示