2013-10-17 64 views
4

我有AngularJS開發的ngList指令的代碼。我想實現類似的東西,但我不明白部分代碼。下面是代碼你能解釋ngList指令

var ngListDirective = function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attr, ctrl) { 
     var match = /\/(.*)\//.exec(attr.ngList), 
      separator = match && new RegExp(match[1]) || attr.ngList || ','; 

     var parse = function(viewValue) { 
     var list = []; 

     if (viewValue) { 
      forEach(viewValue.split(separator), function(value) { 
      if (value) list.push(trim(value)); 
      }); 
     } 

     return list; 
     }; 

     ctrl.$parsers.push(parse); 
     ctrl.$formatters.push(function(value) { 
     if (isArray(value)) { 
      return value.join(', '); 
     } 

     return undefined; 
     }); 
    } 
    }; 
}; 

這裏是部分我不理解:

  • 功能(範圍,元素,屬性,CTRL):本CTRL變量。我在哪裏可以閱讀更多關於這個。
  • ctrl。$ parsers.push(parse);:我在哪裏可以閱讀更多關於這種用法
  • CTRL $ formatters.push(函數(值){:我需要了解這是我將努力實現類似
  • 需要的東西:「ngModel 「:爲什麼ngModel需要
+0

http://docs.angularjs.org/api/ng.directive:ngList –

+0

@TusharGupta那鏈接不回答任何問題。 –

+0

@JimSchubert這就是爲什麼它是評論沒有發佈爲答案,僅供參考。 –

回答

5

首先,榮譽閱讀源

ctrl是必需的指令(S)(在這種情況下,從ngModel未來在中發現的控制器(S)!)

$解析器和$ formatters- http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController

總之,並且牢記角具有同時跟蹤ngModel數據的DOM表示以及對角模型的表示,$解析器把手翻譯DOM將ngModel數據的側面表示轉換爲數據的角度模型視圖。 $格式化程序將模型視圖轉換爲DOM適當的表示形式。所以他們是一對,$解析器從DOM到模型,$格式化器返回。

最後,ngModelngList進程ngModel數據。因此,它需要找到一個ngModel指令,有數據ngList應該處理(這需要我們充分一圈,又回到ctrl