2015-04-15 40 views
0

我有一個控制器,並希望element.When我創建它的元素應該調用控制器函數來創建dymanically,但功能不叫AngularJs呼叫控制器功能從動態創建的元素

app.controller('AbnTestController', ['$scope','$timeout',function($scope,$timeout) { 
.......................... 
var tree1; 
tree1 = [ 
    { 
    label: 'test1', 
    id:'1', 
    type:'t', 

    }]; 
    return $scope.addnew= function() { 
    ......... 
    something 

}; 

在我的指令,我創造了動態元素;

app.directive('mytree', [ 
'$timeout', function($timeout) { 
    return { 
    restrict: 'E', 
    controller: function($scope) { 
     $scope.launch = function (mn) {........something.....}}, 

    template: "<a ng-click='addnew()'>Click</a>", 
    replace: true, 
    scope: { 
     treeData: '=', 
     onSelect: '&',  
     initialSelection: '@', 
     treeControl: '=' 
    } 
    ........... 
    }}]); 

我想從動態創建的元素中調用'addnew'函數。

+0

[Angular:在使用&的指令鏈接函數中調用控制器函數]可能的副本(http://stackoverflow.com/questions/16839259/angular-calling-controller-function-inside-a-directive-link-功能使用) – CodingIntrigue

回答

0

每個指令都有一個隔離範圍。 。

這意味着「ADDNEW」功能並不在範圍指令模板可用

要做到這一點,你可以將下面的行添加到您的指令定義的「範圍」屬性:

addNew: '&' 

這將範圍屬性原有範圍的一個結合(見:https://docs.angularjs.org/guide/directive

你的指令應該是這樣的:

app.directive('mytree', [ 
'$timeout', function($timeout) { 
    return { 
restrict: 'E', 
controller: function($scope) { 
    $scope.launch = function (mn) {........something.....}}, 

template: "<a ng-click='addnew()'>Click</a>", 
replace: true, 
scope: { 
    treeData: '=', 
    onSelect: '&',  
    initialSelection: '@', 
    treeControl: '=', 
    addNew: '&' 
} 
........... 
}}]); 
+0

不起作用,再次找不到addnew() – user4773604

+0

嗯..我有一個camelCase-Typo ..你有沒有注意到它? –