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

$compileAngular に新しい要素を知らせるために を使用する必要があります。

ソリューションの核心は次のとおりです。

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

コードの修正版を使用するこのプランカーを参照してください: http://plnkr.co/edit/tOUl8CM56GSd0L3xdNQW?p=preview

注: あなたの質問では、openofopenCntlが呼び出されると考えているようですが、新しい要素には独自のng-controller参照がありdialogCntlます。あなたの質問でopenCntlは、新しい要素のコントローラーではなく、ディレクティブのコントローラーです。また、提供することでプランカーでそれを修正しましたdialogCntl

于 2013-07-18T03:25:39.803 に答える