我从Angular文档中观察到,$compileProvider
同时具有directive()
和component()
方法。看到:
https://docs.angularjs.org/api/ng/provider/$compileProvider
我还在文档中观察了该指令的用法 https://docs.angularjs.org/api/ng/service/$compile
搜索:'compileExample'
但我没有看到任何对目的的解释。
问题
问)为什么$ compileProvider有一个指令方法?目的或益处是什么?
问)如何在编译器中注册指令与在模块上声明指令不同?
答案 0 :(得分:1)
如何使用编译器注册指令与在模块上声明指令不同?
module loader使用$compileProvider.directive()
方法加载指令:
AngularJS Module Loader Source Code
/** * @ngdoc method * @name angular.Module#directive * @module ng * @param {string|Object} name Directive name, or an object map of directives where the * keys are the names and the values are the factories. * @param {Function} directiveFactory Factory function for creating new instance of * directives. * @description * See {@link ng.$compileProvider#directive $compileProvider.directive()}. */ directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'),
不同之处在于模块加载器能够装饰指令并在配置阶段之前完成。我没有找到在配置阶段添加指令的用例。
答案 1 :(得分:0)
https://docs.angularjs.org/guide/module上的AngularJS指南声明:
<h2>Hoverable Dropdown</h2>
<p>Move the mouse over the text below to open the dropdown content.</p>
<div class="dropdown">
<span>Mouse over me</span>
<div class="dropdown-content">
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
</div>
</div>
所以我们知道至少display
指示工厂angular.module('myModule', []).
value('a', 123).
factory('a', function() { return 123; }).
directive('directiveName', ...).
filter('filterName', ...);
// is same as
angular.module('myModule', []).
config(function($provide, $compileProvider, $filterProvider) {
$provide.value('a', 123);
$provide.factory('a', function() { return 123; });
$compileProvider.directive('directiveName', ...);
$filterProvider.register('filterName', ...);
});
是什么。
$compileProvider
至少有一个重要的用例:在单元测试中模拟指令。要查看此内容,请查看Sylvain对此StackOverflow问题的答案:How do you mock directives to enable unit testing of higher level directive?。