2

关于 angularJS 的新手问题,但在搜索过的教程中没有看到类似的案例。

如何使用相同的指令定义将不同的参数传递给各个 div 实例?在这里,我希望看到red green blue,但我blue blue blue在 HTML 中看到。我看到控制器在链接之前被调用。

http://jsfiddle.net/gradualstudent/Y2bBy/

<!DOCTYPE html>
<html >
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
    <script>
      var app = angular.module('myApp', []);

      app.directive("element", function () {
        return {
          restrict: "A",
          template: '<h1>{{type}}</h1>',
          link: function (scope, element, attrs) {
            scope.type = attrs.element;
            console.log("Setting:  "+scope.type);
          },
          controller: function ($scope) {
            console.log("Checking: "+$scope.type);
          }
        };
      })

    </script>
</head>
<body ng-app="myApp">
  <div element="red">1</div>
  <div element="green">2</div>
  <div element="blue">3</div>

</body>
</html>
4

2 回答 2

5

您的指令的所有实例都使用相同的范围,并且每次link调用该函数时,它都会覆盖先前设置的scope.type. 如果您创建一个隔离范围,那么它将起作用,因为指令的每个实例都将获得自己的范围:

    app.directive("element", function () {
    return {
      restrict: "A",
      scope: {},
      template: '<h1>{{type}}</h1>',
      link: function (scope, element, attrs) {
        scope.type = attrs.element;
        console.log("Setting:  "+scope.type);
      },
      controller: function ($scope) {
        console.log("Checking: "+$scope.type);
      }
    };
  })
于 2013-10-04T04:52:40.727 回答
5

在您共享的示例中,指令共享父范围。由于所有指令共享相同的父范围,因此只有一个变量type可用。

您可以选择

scope:true   //Creates new scope for each directive instance

或者

scope:{} //as provided by akonsu. Creates an isolated scope.

为了完整起见,请花时间了解范围原型继承https://github.com/angular/angular.js/wiki/Understanding-Scopes

于 2013-10-04T05:59:05.327 回答