2014-12-28 161 views
0

所以,我有我的指令:傳遞函數角度指令

<editable comp="comp" key="'quantity'" input-type="'number'" ed-on-change="save()"></editable> 

我的指導作用:

function editable() { 
    return { 
     restrict: 'E', 
     scope: { 
      comp: '=comp', 
      key: '=key', 
      inputType: '=inputType', 
      edOnChange: '=edOnChange' 
     }, 
     templateUrl: '/Partials/Editable.html', 

這是在ng-repeat運行,因此被擊中的20倍左右。我在控制器範圍內的save()函數中執行console.log('saved'),並輸出20次。

$compile$apply被稱爲(我猜這是什麼造成它)時,有沒有辦法阻止此功能被解僱?

巧合的是,我沒有看到ng-click具有相同的行爲,所以我可能會同時查看源代碼。

解決,但不理想

所以只需在ed-on-change消除對save()所以傳入保存功能的引用,那麼就調用它時,我想。

+0

你想保存()不被調用上$編譯? – unobf

+0

如果解決了我的問題? –

+0

我問的是,調用save()函數的問題是什麼? – unobf

回答

0

答案是使用$parse

<editable ed-on-change="save()"></editable> 

在指令:

.directive('editable', ['$parse', function ($parse) { 
    return { 
     restrict: 'E', 
     link: function (scope, element, attrs) { 
      var changeCallback = $parse(attrs.edOnChange) || null; 
     } 
}); 
0

我傳遞函數來指示的方法是這樣的:

<editable ... ed-on-change="save"></editable> 

通知我除去()

然後,在指令中,我將在範圍聲明中使用與您所寫的相同的方式。

而且我會在Editable.html

<div .. ng-click="edOnChange()"></div> 
0

的消化循環將始終調用在屬性名的功能,因爲這是它是如何設置該屬性的值。

如果您想要將某個函數的名稱傳遞給指令,以便在發生某些事件時調用該指令,那麼您應該將其作爲該函數的名稱,例如ED-平變化= 「保存」。

在我看來,你在這裏所做的並不完全是「角度」的方式,如果你添加更多的信息,我可以提供更好的解決方案。