2014-11-21 69 views
3

我在控制器的以下功能:如何將函數處理程序從控制器傳遞到AngularJs中的指令隔離範圍?

angular.module('app').controller('BodyController', function(){ 
    this.click = function(message){ 
     alert(message); 
    } 
    }) 

我想通過此功能分爲指令的隔離範圍與一些特定PARAMS調用它,這樣的事情:

angular.module('app').directive('custom', function(){ 
    return { 
     restrict: 'A', 
     scope: { 
     text: '@', 
     click: '&click' 
     }, 
     link: function(scope, element){ 
     //... 
     scope.click('Hello, Plunker!'); 
     //... 
     } 
    } 
    }) 

而且我通過thefunction以這種方式:

<h1 custom text="Hello Plunker!" click="ctrl.click"></h1> 

下面是一個例子:http://plnkr.co/edit/4zkxuHJIB3D339h2Oy60?p=preview

該函數未被調用。我錯過了什麼?提前

+0

編輯:沒關係,打開你的重拳,不起作用。 – Jhecht 2014-11-21 08:21:07

+0

ctrl是undefined – Andrey 2014-11-21 08:24:41

回答

3

通過使用click: '&click'

感謝(可簡寫爲click: '&'),你說「讓click在內部範圍,'click'屬性執行的表達」。這意味着你需要實際調用表達式中的方法,而不是指向它。

<h1 click="ctrl.click()">...</h1> 

如果,另一方面,你要得到外部函數的引用,然後用它玩(如參數傳遞給它),你需要把它用:

scope: { 
    click: '=' 
} 

或只使用由@邁克爾zuchetta,這是新的我:)

+0

在這種情況下,如何傳遞一個參數來從指令中點擊函數? – Andrey 2014-11-21 08:26:56

+1

我已經編輯了包含這個的答案(並刪除了我對它的無知評論,這是不可能的)。 – hon2a 2014-11-21 08:44:56

2

這是一個解決方案:

<h1 custom text="Hello Plunker!" click="click(message)"></h1> 

添加的消息參數,然後將其綁定:

scope.click({message: "Hello Plunker:"}); 

這是工作的例子: http://jsfiddle.net/u748hLvn/2/

相關問題