AngularJS:使用指令的所有元素都显示相同的值

AngularJS:使用指令的所有元素都显示相同的值,angularjs,Angularjs,我有一个指令,它通过这样一个属性传递对作用域数据的引用(假设$scope.parent.child存在): 该指令在使用一次时按预期工作。但是,当多次使用并且使用不同的项属性值时,使用该指令的所有元素都显示相同的值 下面是我的完整代码,这里有一个Plunker:。如果您注意到,使用指令(第8行)更改第二个元素上的item=值会将所有元素的值更改为该值 我做错了什么?如何使每个元素/指令脱离其单独的项属性?谢谢 <!DOCTYPE html> <html ng-app='fam

我有一个指令,它通过这样一个属性传递对作用域数据的引用(假设
$scope.parent.child
存在):

该指令在使用一次时按预期工作。但是,当多次使用并且使用不同的
属性值时,使用该指令的所有元素都显示相同的值

下面是我的完整代码,这里有一个Plunker:。如果您注意到,使用指令(第8行)更改第二个元素上的
item=
值会将所有元素的值更改为该值

我做错了什么?如何使每个元素/指令脱离其单独的
属性?谢谢

<!DOCTYPE html>
<html ng-app='familyApp'>
  <head>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <div ng-controller='BaseController'>
      <p>{{ parent.child.name }}: <span status-label item='parent.child'></span></p>
      <p>{{ root.name }}: <span status-label item='root'></span></p>
    </div>
  </body>
    <script data-require="jquery@1.7.1" data-semver="1.7.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="http://code.angularjs.org/1.2.12/angular.js" data-semver="1.2.12" data-require="angular.js@1.2.12"></script>
    <script>
    var familyApp = angular.module('familyApp', []);
      angular.module('familyApp').controller('BaseController',
        function ($scope) {
          $scope.root = {
            name: 'Jack',
            age: 40,
            flagged: false
          };   
          $scope.parent = {
            child: {
              name: 'Jill',
              age: 30,
              flagged: true
            }
          };          
        });
      angular.module('familyApp').directive('statusLabel',
        function ($compile, $parse) {
            return {
                link: function (scope, element) {
                    scope.status = function (item) {
                        item = $parse(element.attr('item'))(scope);
                        if (item.flagged === true) {
                          return 'flagged';
                        }
                        return 'clean';
                    };
                },
                transclude: true,
                template: '<div ng-switch on="status()"><div ng-switch-when="flagged">Flagged</div><div ng-switch-when="clean">Clean</div></div>'
            };
        });
    </script>
</html>

{{parent.child.name}}:

{{root.name}}:

var familyApp=angular.module('familyApp',[]); 角度。模块('familyApp')。控制器('BaseController', 职能($范围){ $scope.root={ 名字:“杰克”, 年龄:40,, 标记:false }; $scope.parent={ 儿童:{ 名字:“吉尔”, 年龄:30,, 标记:正确 } }; }); angular.module('familyApp')。指令('statusLabel', 函数($compile,$parse){ 返回{ 链接:功能(范围、元素){ scope.status=功能(项目){ item=$parse(element.attr('item'))(范围); 如果(item.flagged==真){ 返回“已标记”; } 返回“干净”; }; }, 是的, 模板:“FlaggedClean” }; });
您将希望通过将scope设置为something来赋予指令它自己的作用域

你可以了解更多