如何在角度中读取模块与vanilla JS库?

时间:2014-10-13 22:19:57

标签: javascript angularjs gist annyang

我是角度服务/提供商/工厂模块的新手。我一直在使用一个名为annyang的库30分钟,我想找到使用这个库的更“有棱角”的方式。

一些独立于git的人在这里找到了一个moduleProvider:ngAnnyang

它没有关于如何正确使用它的文档。

但传统的annyang你只是跑:

var commands = {
  'remind me to *val' : reminders,
};

annyang.addCommands(commands);
annyang.start();

问题: 将模块注入我的角度应用程序后:

  1. 这个模块的实现是否相同,或者命令现在以ng为前缀,如:ngAnnyang.addCommands(); ngAnnyang.start();

  2. 我是否还需要将annyang的原始lib作为应用程序中的脚本标记?

  3. 这个角度包装中的什么使它“有角度”,除了它现在可以注入?

  4. JS:NG-annyang

        /**
    * ngAnnyang Module
    *
    * Annyang Angular wrapper
    */
    angular.module('ngAnnyang', ['ng'])
      .provider('ngAnnyang', function ngAnnyangProvider() {
        'use strict';
    
        var isEnabledFn = function() {};
    
        // events
        console.log('ngAnnyang: set events');
        annyang.addCallback('start', function() {
          console.log('ngAnnyang: enabled true');
          isEnabledFn(true);
        });
        _.each(['end', 'error', 'errorNetwork', 'errorPermissionBlocked', 'errorPermissionDenied'], function(v) {
          annyang.addCallback(v, function() {
            console.log('ngAnnyang: enabled false');
            isEnabledFn(false);
          });
        });
    
        console.log('ngAnnyang: start');
        annyang.start();
    
        this.debug = function(state) {
          if(state){
            console.log('ngAnnyang: set debug', !!state);
            annyang.debug(!!state);
    
          } else {
            console.log('ngAnnyang: set debug', true);
            annyang.debug();
          }
        };
    
        this.setLanguage = function(lang) {
          if(lang){
            console.log('ngAnnyang: debug', ''+lang);
            annyang.setLanguage(''+lang);
          }
        };
    
        this.$get = function ngAnnyangFactory(){
          return {
            isEnabled: function(fn) {
              console.log('ngAnnyang: isEnabled callback', fn);
              isEnabledFn = fn;
            },
            addCommands: function(commands) {
              console.log('ngAnnyang: add commands', commands);
              annyang.addCommands(commands);
            },
            removeCommands: function(commands) {
              console.log('ngAnnyang: remove commands', commands);
              annyang.removeCommands(commands);
            }
          };
        };
      });
    

2 个答案:

答案 0 :(得分:1)

您需要使用以下内容:

angular.module(“你的应用名称”).config(“ngAnnyangProvider”,function(ngAnnyangProvider){

ngAnnyangProvider.addCommands(...);

});

更多详情:

https://docs.angularjs.org/guide/module

答案 1 :(得分:1)

  

这个模块的实现是否相同,或者命令现在得到前缀   与nglike:ngAnnyang.addCommands(); ngAnnyang.start();

似乎ngWrapper在实例化提供程序后立即启动服务。你会以同样的方式使用它:

var app = angular.module('app',[]);

app.controller('SpeechRecognize', ['ngAnnyang','tpsService',function(speechRecognition, tpsService) {
    var commands = {
        'show tps report': function() {
          tpsService.show();
        }
    };
    speechRecognition.addCommands(commands);
}]);
  

我是否还需要将annyang的原始库作为脚本标记   应用程序?

是的,因为这只是原始库的包装。

  

这个角形包装物的作用是什么?#34;棱角分明的"除了它现在可以   被注射?

似乎这是它提供的唯一好处。这也使测试更容易。