2013-04-16 42 views
3

我正在嘗試創建一個可以增強HTML元素的指令。所以我設法得到指令運行,並要與元素相關聯的我當前的代碼是這樣的:將方法添加到Angular指令?

angular.module('myModule', []) 

    .directive('myDirective', function() { 
     return { 
      restrict: 'C', 
      replace: false, 
      scope: {}, 
      link: function(scope, element, attrs) { 

      } 
     } 
    }); 

現在我想新的方法添加到HTML元素,比如我想這樣做:

// Pseudo code 
myElement.reset(); 
myElement.reload(); // etc. 

將這些方法添加到指令的最佳方法是什麼?

+1

這不是我清楚你真正想做的事,但你不把功能HTML元素的角度。定義函數的一個自然的地方可能在指令控制器中,然後通過$ scope指令或控制器本身暴露它們 - 這取決於你想要做什麼。 – joakimbl

+0

或多或少與我的問題相同http://stackoverflow.com/questions/34682739/initialising-and-re-initialising-a-component-in-angularjs。我仍然在尋找令人滿意的答案。如果阿爾喬姆的回答是「角度方式」,那麼角度方式不是一個很好的方法。 – poshest

回答

1

你的指令的例子是非常基本的,所以我不明白你想要達到什麼。至少我可以這樣說:您可以將新功能定義爲範圍的功能,例如,

... 
link: function(scope, element, attrs) { 
    scope.reset = function() { 
     // reset something 
    } 
    // ... 
} 

如果您想訪問範圍內加載的數據(例如用於函數reload()),您應該編寫一個控制器供此使用。所以你可以注入一個服務作爲數據源。 實現直接綁定到元素的函數更多的是jQuery的方式,而不是angularjs。在angularjs中,你主要使用範圍。

也許你充其量提供使用的jsfiddle或plnkr一個更完整的例子,我覺得它更容易幫助,看看你的使用情況或作爲一件工作代碼您的問題。

+2

我不明白;根據這個答案:http://stackoverflow.com/a/15681173/1641941污染範圍與屬於您的指令功能是不好的,但我還沒有找到在哪裏添加以及如何調用它們。這和其他答案彈出在谷歌搜索,但不回答我的問題。 – HMR

+0

@HMR不用擔心污染範圍,因爲你有'範圍:{}'指令具有隔離範圍。您可以在鏈接或控制器中的作用域中添加函數。 –

相關問題