2

我對AngularJS有一些經驗,並且已經在網上看到了這個指令,但它不像我以前見過的任何東西,我無法理解它在做什麼?誰能幫忙?AngularJS:這個指令是幹什麼的?

具體問題:由於很少理解,指令的簽名必須執行依賴注入。但是我掙扎的是:如果在數組中傳入$ injector,爲什麼它也作爲函數中的參數發送,例如function($ injector);換句話說,爲什麼有兩個$注射器?如果我不在數組中發送$注入器,什麼都行不通?

此外,該指令是如何嵌入控制器的?你什麼時候定義這樣的控制器?

另外我通常在下面的代碼中看到帶有$前綴的作用域如何在沒有$的情況下工作?

任何鏈接閱讀更多或在這裏解釋它將是有用的。

.directive('mycomp', [ 
    '$injector', function($injector) { 
     var $builder, $compile, $drag; 
     $builder = $injector.get('$builder'); 
     $drag = $injector.get('$drag'); 
     $compile = $injector.get('$compile'); 
     return { 
     restrict: 'A', 
     scope: { 
      component: '=mycomp' 
     }, 
     controller: 'mycompController', 
     link: function(scope, element) { 
      scope.copyObjectToScope(scope.component); 
      $drag.draggable($(element), { 
      mode: 'mirror', 
      defer: false, 
      object: { 
       componentName: scope.component.name 
      } 
      }); 
      return scope.$watch('component.template', function(template) { 
      var view; 
      if (!template) { 
       return; 
      } 
      view = $compile(template)(scope); 
      return $(element).html(view); 
      }); 
     } 
     }; 
    } 
    ]) 

回答

4

爲什麼它在功能上也即功能($噴射器)作爲參數發送;換句話說,爲什麼有兩個$注射器?

在進行數組類型注入時,如何調用函數中的參數並不重要,它將映射到數組項。例如,如果我們有

['$injector', function(a) {..}] 

參數a將映射到$injector例如,如果我們有

['$injector', '$scope', function(a, b) {..}] 

a將映射到$injector實例和b將映射到$scope實例。這裏的命令是重要的。更多這裏:https://docs.angularjs.org/tutorial/step_05在A 關於縮小注意事項部分。

如果我不在數組中發送$注入器,什麼都行不通?

如果你不這樣做,$ injector將會是undefined,其中一些解釋如上。

這條指令是如何嵌入控制器的?你什麼時候定義這樣的控制器?

某些指令可以有控制器,如果需要的話,他們應該持有一些較重的邏輯,$ scope綁定等等。 鏈接函數實際上應該只保留與$元素的交互。 這裏更多:http://www.sitepoint.com/practical-guide-angularjs-directives/

而且我通常看到的範圍與下它是如何工作沒有$的代碼中的$前綴?

在這種情況下,scope用於鏈接功能,它不是可注射的。在這種情況下,它是一個簡單變量scope,它指控制器範圍。你可以稱它爲superBigVariableName,它仍然會引用範圍,並仍然有效。 所以請記住,該鏈接功能實際上是一個簡單的功能,其中第一個屬性是範圍,第二個是元素,第三個是屬性,您不能注入服務到您的鏈接功能(在控制器中執行該邏輯)

+0

非常很好的解釋,謝謝,你能提出一個關於嵌入控制器的指令中更復雜的東西的一個好鏈接(支持你最後一段的解釋,而不是它不回答,但擴展我對這些知識的瞭解)? – joatmom9

+1

也許在這裏:http://www.bennadel.com/blog/2446-using-controllers-in-directives-in-angularjs.htm這不是很常見和有據可查的事情:[ – domakas