AngularJs传递HTML每个NG-重复的实例指令(AngularJs pass instanc

2019-09-04 04:16发布

我想这应该是简单的,但我失去了一些东西。 我如何传递一个flowObj在我的ng-repeat下面我的指令? 我想将它传递给我的指令,然后点击使用该FlowObj然后应用一些逻辑。 我想在我的指令使用注释代码

scope: { 
    test:"@" 
}

但似乎搞砸了我的CSS。

HTML:

<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
            <div id="center_outer">
                <div id="center_inner"  ng-controller="CtrlPageFlow"> 
                    <div flowclick   class="cflow" ng-repeat="flowObj in flows"   >
                        {{flowObj.name}}
                    </div>
                </div>
            </div>
    </body>
</html>

这里是我的指令

angular.module('directives', ['opsimut']).directive('flowclick', function() {
    return {   
        /* 
        scope: {
            test:"@"   // set the attribute name on the directive's scope
        },
        */
        link: function(scope, elem, attr) {
            elem.bind('click', function(scope) {
                debugger;
                alert(scope.flowObj);
                //scope.name += '!';
                //scope.$apply();
            });
        }
    };
});

解决方案:根据回答:

angular.module('directives', ['opsimut']).
  directive('flowclick', function() {


        return {



                  link: function(e, elem, attr) {
                    // scope is the directive's scope,
                    // elem is a jquery lite (or jquery full) object for the directive root element.
                    // attr is a dictionary of attributes on the directive element.
                    elem.bind('click', function(e1) {

                      debugger;

                      alert(e.flowObj);


                    },e);
                  }
        };


  });

Answer 1:

解决方案:删除整个scope从您的指向性,并如预期正常工作了。

此外您也将需要重新命名的scope从这样的论点:

elem.bind('click', function(scope) {

喜欢的东西:

elem.bind('click', function(e) {

因为要覆盖访问scope ,通过使用相同的名称在事件处理。

说明:

ng-repeat指令导致它的每一个克隆拥有自己的新范围。 由于在默认情况下一个元素份额范围的指令,任何其他指令放在旁边的ng-repeat份额的范围,并获得当前迭代的$scope变量。 换句话说,您的自定义指令已经共享范围与ng-repeat ,并已获得flowObj默认。

指定当它不工作的原因scope上的自定义指令属性,这导致指令具有不分享自己的分离范围ng-repeat ,所以你没有访问变量对克隆的范围。



文章来源: AngularJs pass instance of each ng-repeat in HTML to directive