簡體   English   中英

將函數傳遞給角度指令

[英]Passing function to angular directive

所以我有我的指令:

<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上的() ,然后傳遞save函數的引用,然后在需要時調用它即可。

我將函數傳遞給指令的方式是這樣的:

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

注意,我刪除了()

然后,在指令中,我將在作用域聲明中使用與編寫相同的方式。

我將在Editable.html

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

摘要循環將始終調用屬性名稱中的函數,因為這是它設置該屬性值的方式。

如果您試圖將某個函數的名稱傳遞給該指令,以便在發生某些事件時調用該指令,則應使其僅是該函數的名稱,例如ed-on-change =“ save”。

在我看來,您在這里所做的似乎不是“ Angular”方式,如果您添加更多信息,我可以提供更好的解決方案。

答案是使用$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;
        }
});

暫無
暫無

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

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