2014-01-29 61 views
3

我正在編寫我的第一個指令 - 它本質上只是jquery中編寫的freebase搜索小部件的封裝。從角度指令返回數據

我想使指令的獨立的應用程序(與僅依賴是外部CSS和jQuery)。

的指令Here is a plunkr因爲它是現在。

而指令本身:

directive('suggest', function() { 
    return { 
     restrict: 'E', 
     template: "<input type='text'>", 
     replace:true, 
     link: function(scope, element, attrs) { 
     var language = 'en'; //set english as default language 
     if (attrs.lang){ 
      language = attrs.lang; 
      attrs.$observe('lang', function(value) { 
      console.log("lang val " + value); 
      language = value; 
      }); 
     } 
     $(element).suggest({ 
      "lang": language 
     }) 
     .bind("fb-select", function(e, data) { 
      console.log(data); 
     }); 
     } 
    }; 
}); 

當用戶從下拉菜單中選擇項,下面的函數運行:

.bind("fb-select", function(e, data) { 
      console.log(data); 
     }); 

什麼是餵養從數據的最佳實踐選擇使用它的應用程序?

回答

4

最角的方法是實現這一使用數據綁定(2方式)在一個孤立的範圍:

restrict: 'E', 
     template: "<input type='text'>", 
     replace:true, 
     scope:{ 
     myModel:'=' 
     }, 
     link: function(scope, element, attrs) { 
     ............ 

和選擇功能內:

.bind("fb-select", function(e, data) { 
      console.log(data); 
      scope.myModel=data; 
}); 

用法:

<suggest my-model="someModel" .... />

,並在控制器$範圍:

$scope.someModel="";

你仍然需要處理最初雖然在你的指令,預先選定的模型綁定,但是啊,最徹底的方法是雙向的數據通過分離範圍結合。

編輯

這2篇文章是可以很好地給端口的jQuery插件角:

http://rogerz.github.io/blog/2013/09/27/jQuery-to-angularjs/

http://henriquat.re/directives/advanced-directives-combining-angular-with-existing-components-and-jquery/angularAndJquery.html

+0

感謝您的回答。當你說我需要處理指令中的初始綁定時,你能解釋一下你的意思嗎?你指的是scope.myModel = data;線? – bornytm

+0

我似乎無法得到這個工作 - 我已更新plunker – bornytm

+0

@bornytm這個指令應該做什麼?即期望的行爲?需要指出的一點是,你在''directive'定義中傳遞'lang'通過隔離範圍,但是你用'attrs。$ observe'來觀察它,如果它通過一個你使用scope的範圍$ watch','attrs。$ observe'用於觀察屬性參數而不是範圍參數。我建議你看看周圍的角度指令是如何創建的,有很多漂亮的博客。 –