Angularjs 可以将指令$compiler注入到服务中吗?

Angularjs 可以将指令$compiler注入到服务中吗?,angularjs,angularjs-directive,angularjs-service,angularjs-controller,angularjs-injector,Angularjs,Angularjs Directive,Angularjs Service,Angularjs Controller,Angularjs Injector,我正在尝试将a输出为,以便将放置在代码显示窗口中。我感兴趣的是实际的代码,而不是浏览器呈现的版本,因为我正在向高级用户显示代码。因此,我希望能够将一个指令函数注入到服务或页面控制器中 这将类似于使用,或者甚至,但是对于特定的指令。我想我已经定义了这个指令,我很有可能以某种方式访问html生成函数。我知道您可以在指令定义中定义控制器,但我正在寻找一种在服务或页面控制器中使用的解决方案 例如,我在一个模块中定义了一个指令 mod.directive("superThing", function()

我正在尝试将a输出为,以便将放置在代码显示窗口中。我感兴趣的是实际的代码,而不是浏览器呈现的版本,因为我正在向高级用户显示代码。因此,我希望能够将一个指令函数注入到服务或页面控制器中

这将类似于使用,或者甚至,但是对于特定的指令。我想我已经定义了这个指令,我很有可能以某种方式访问html生成函数。我知道您可以在指令定义中定义控制器,但我正在寻找一种在服务或页面控制器中使用的解决方案

例如,我在一个模块中定义了一个指令

mod.directive("superThing", function() {
        return {
            templateUrl: "/superThing.html",
            scope: {
               variableA: "="
            }
        };
    });
离职:

 mod.service("applicationService", [ "$rootScope", "superThing",
        function ($rootScope, superThing) {
          $rootScope.result = superThing($rootScope);
       }
]);
(我知道像这样使用$rootScope很奇怪,但我只是想给出一个简短的成功例子。)

页面模板示例:

<fieldset>
  <legend>Preview:</legend>
  <div data-super-thing data-variable-a="false">
  </div>
</fieldset>
<fieldset>
   <legend>Code output:</legend>
   <textarea rows="4" cols="50" data-code-mirror="{{result}}">
   </textarea>
</fieldset>

预览:
代码输出:

是否有办法将指令的内部$compiled版本或类似版本注入服务?

根据您的需要,我可以提供4个选项:

  • 使用服务手动创建指令
  • 创建一个指令,该指令将在变量中记录html
  • 创建一个公共指令,该指令将通过事件
    $emit
    报告其内容html进行报告
  • 创建一个通用指令,将html记录在变量中(我认为这是首选解决方案。
现场示范

角度模块('ExampleApp',[]) .controller('ExampleController',函数($scope,compileDirective){ $scope.valueShow=1234567; $scope.array=[1,23,4,5,9,6]; $scope.addInArray=函数(){ $scope.array.push(Math.random()); } var elem=compileDirective.get(myDirective{ 瓦尔:1234 }); console.log('由服务编译',elem); $scope.$on('show-compile.html已更改',函数(事件,值){ log('show cimpile'中的html'值); }); }) .service('compileDirective',函数($compile,$rootScope){ 返回{ get:函数(directiveFn,scope){ var指令=myDirective(); directive.scope=$rootScope.$new(false); for(范围内的var k) 指令范围[k]=范围[k]; 返回$compile(directive.template)(directive.scope); } }; }) .directive('myDirective',myDirective) .directive('showcomileevent',function(){ 返回{ 限制:“A”, 链接:功能(范围、要素){ 范围$watch(函数(){ 返回elem.html(); },功能(val){ 作用域$emit('show-compile.html已更改',val); }); } }; }) .directive('showcomile',function(){ 返回{ 限制:“A”, 作用域:{showcomile:=“}, 链接:功能(范围、要素){ 范围$watch(函数(){ 返回elem.html(); },功能(val){ scope.showcile=val; }); } }; }) .directive('myDirectives',function(){ 返回{ 限制:“EA”, 替换:正确, 范围:{ val:“=”, htmlVal:“=” }, 模板:“{val}}”, 链接:功能(范围、要素){ 范围$watch(函数(){ 返回elem.html(); },功能(val){ 作用域$emit('my-directive.html已更改',val); scope.htmlVal=val; }); } }; }); 函数myDirective(){ 返回{ 限制:“EA”, 替换:正确, 范围:{ 瓦尔:“=” }, 模板:“{val}}”, }; }

我的指令{{selfHTML}的Html
外接程序数组
{{a}
{{htmlFromNgRepeat}}

请给出一个您希望作为输出显示的示例,好吗?@zhekaus-我添加了一个页面模板来显示输出的显示方式,但是如果您希望我也包括最终输出,我也可以这样做。