2016-09-20 17 views
4

我知道一個角指令可以以四種方式定義:AngularJS 1.XX - 爲什麼有人會對指令使用「M」限制?

'A' - only matches attribute name 
'E' - only matches element name 
'C' - only matches class name 
'M' - only matches comment 

例如與restiction 「M」 一個指令:

angular.module('exampleApp', []) 
    .directive('myDirective', function() { 
     return { 
     restrict: 'M', 
     ... 
     }; 
}); 

並聲明在HTML

<!-- directive: my-directive --> 
指令

但爲什麼會有人使用M限制的指令?我覺得這很奇怪。因爲如果我註釋掉代碼,我不希望它運行。那麼,爲什麼這是一件事?

+0

如果你將在瀏覽器上的應用程序的源代碼,你會看到一個角使用意見作爲指令說明所有的時間,爲什麼他們不允許我們也使用它呢? (是的,很奇怪) –

+0

@str嗯當前文檔中我仍然看到M個限制,HTTPS://docs.angularjs。org/guide/directive –

+0

也許這是一個很好的插入javascript指令,如鍵盤控制,鼠標控制等 –

回答

3

docs

最佳實踐:儘量使用通過標籤名稱指令及以上評論和類名屬性 。這樣做通常可以更容易地確定給定元素匹配的指令。

最佳實踐:註釋指令通常用於DOM API限制創建跨越多個元素 (例如內部元素)的指令的地方。 AngularJS 1.2引入 NG-重複啓動和NG-重複端作爲一個更好的解決這個問題 。鼓勵開發人員在可能的情況下使用此自定義註釋 指令。

這是不是現在用它很好的做法。

根據該post它通常僅用於向後兼容性和用於使標記驗證使用。

如何使用它下面是一個例子

(function() { 
 
    angular 
 
    .module('exampleApp', []) 
 
    .directive("comment", function() { 
 
     return { 
 
     restrict: 'M', 
 
     replace : true, 
 
     template : "<h1>Made by a comment directive!</h1>", 
 
     link: function(scope, element, attrs) { 
 
      console.log(attrs.comment); 
 
     } 
 
     }; 
 
    }) 
 
})();
<!DOCTYPE html> 
 
<html ng-app='exampleApp'> 
 

 
<head> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> 
 
</head> 
 

 
<body> 
 

 
</body> 
 

 
<body> 
 
    <!-- directive: comment comment argument string --> 
 
</body> 
 

 
</html>

3

因爲如果我註釋掉代碼,我不希望它運行。

這不是HTML你說的是,這是一個約定/功能。該註釋在DOM內仍可見/可訪問,作爲註釋節點。 HTML解析器不會對它做任何事情,這是真的。但是Angular仍然可以找到並解析它並採取行動。所以,是的,這是聲明一個對DOM沒有任何副作用的指令的另一種方式。您必須非常明確地在註釋中使用directive: ...語法;你可能不會觸發這個意外的代碼,你只是想註釋掉。

+0

感謝您的回答,你可以給我一個場景,當我用「M」代替其他方式宣佈該指令? –

+1

我從來沒有用它來達到任何目的,但是我認爲在遇到有用的情況時它很方便。同樣,其優點是它不會在DOM中放置任何有影響的元素;當你想要一個可以與DOM交互的指令(例如與事件冒泡交互)但是應該沒有可見元素時,這可能會很有用。 – deceze

相關問題