簡體   English   中英

如何從控制器在指令范圍內調用函數

[英]How to call a function on a directive scope from the controller

我在互聯網上進行了搜索,找不到解決方案,請幫忙!

directive('menu',function(){
    return{
        link : function(scope,element,attrs){
            scope.foo = function(){
            alert('test!');
            }
        },
        controller : function($scope){
            $scope.foo();
        }
    }
});

使用$evalAsync()延遲對foo()的調用:

controller : function($scope){
    $scope.$evalAsync(function() {
        $scope.foo();
        console.log($scope);
    });
}

小提琴

您也可以使用$timeout()代替$evalAsync() 兩者都允許鏈接功能先執行。

正如Ye Liu所說,您的控制器先調用指令的compile,然后鏈接函數。 從角度指令文檔( http://docs.angularjs.org/guide/directive ):

在預鏈接階段之前實例化控制器

該控制器將在您應用的范圍內,並且一旦鏈接后功能完成,您的指令將屬於此范圍。 考慮鏈接函數的目的是將模型數據綁定到模板並為綁定變量設置監視,而不是創建謹慎的“指令對象”。

如果要在鏈接函數內部設置foo函數以訪問指令范圍變量,請查看指令委托函數和“ scope:”指令屬性中的綁定變量。 angular指令教程在最終示例(“ zippy”)中給出了一個比較鈍的版本, Angularjs Directive Delegate未通過中介處理程序觸發,提供了一個可以從模板本身調用的委托函數的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM