在指令中绑定方法

Bind method inside a directive

本文关键字:方法 绑定 指令      更新时间:2023-09-26

以下是我的自定义指令的Angular代码,该指令创建了一些div:

function footerDirective($compile){
     return { 
         link: function(scope,elements,attributes){
             function createDiv(content,cname,callback){
                var new_div=document.createElement("div"); 
                new_div.setAttribute("ng-click", callback);
                $compile(new_div)(scope);
                new_div.innerHTML=content;
                new_div.className=cname;
                elements[0].appendChild(new_div); 
             }
     for (var i=0;i<5;i++) {
       createDiv(i,"class-numbers","gallery.clickPage()");
     }
}}}

其中CCD_ 1。以上操作很好。但是,我想在gallery.clickPage中传递I作为参数,类似于:

gallery.clickPage.bind(this,i)

如果我将后者作为createDiv内部的参数传递,它将不起作用。我可以通过哪种方式实现我的目标?

正确的方法是在模板中有

<div ng-repeat="mydiv in mydivs" ng-click="gallery.clickPage($index)">{{mydiv.content}}</div>

在指令中:

scope.mydivs = [{content : 1}, {content : 2}, ...]

现在,回答您的问题:您的i是幻影——当您看到页面时,它并不存在,它只存在于angular创建页面时。所以你不能通过。你可以这样通过:createDiv(i,"class-numbers","gallery.clickPage(" + i + ")")

或者,您可以将i值放入范围:scope.myVars=[1,2,3,4,5]createDiv(i,"class-numbers","gallery.clickPage(myVars[" + i + "])")

最后要注意的是,如果你想创建角度元素,你只需要:

angular.element('<div ng-click="someF()">{{anything}}</div>'),然后编译并附加到父级。

为什么不使用:

 for (var i=0;i<5;i++) {
   createDiv(i,"class-numbers","gallery.clickPage(" + i + ")");
 }

如果我只是一个数字,你可以这样传递它,生成的html将是gallery.clickPage(1)等。

将通过1个