0

我有一个像下面这样的指令,基本上是用当前元素附加一个新元素。并在新元素中绑定 ng-controller "openCntl"

explorerModule.controller("openCntl",function($scope, $dialog){
    $scope.open = function(){        
        alert('dialog closed with result: ' + result);
    };
});



explorerModule.directive('ngCustomerClick', function($parse){
    return {
        controller :  "openCntl",

        link: function(scope, element, attr){
            var alert = angular.element(
                '<div class="lp-dropdown-wrapper open"  ng-controller="dialogCntl" ' +
                '><div class="arrow"></div>' +
                '<ul class="nav nav-tabs" style="display: inline;">' +
                '<li class="add" ng-click="open()"><a tabindex="-1" href="#"><span class="icon-coffee"></span>Add</a></li>'+
                '</ul></div>'
            );
        }
    }
});

但是当我单击li时,不要调用控制器“openCntl”中的函数,如何实现?

多谢

4

1 回答 1

7

你必须使用它$compile来让 Angular 知道新元素。

解决方案的核心是:

link : function(scope, el, attrs) {
  var newElem = angular.element('<SomeNewElement/>');
  el.append(newElem);
  $compile(newElem)(scope); 
}

请参阅使用代码修改版本的此 plunker:http ://plnkr.co/edit/tOUl8CM56GSd0L3xdNQW?p=preview

注意:在您的问题中,您似乎认为openofopenCntl将被调用,但您的新元素有自己的ng-controller引用dialogCntl。在您的问题中,openCntl是指令的控制器,而不是新元素的控制器。我还通过提供dialogCntl.

于 2013-07-18T03:25:39.803 回答