将本机JavaScript类集成到角度应用中



我有一个本机JavaScript类:

var Holder = new function(elements) {
    this.elements = elements;
    this.anyFunction() {
        // use of this.elements
    };
};

如何在角路通道中使用它?例如,如果我想使用:

.controller('AnyController', ['Holder',
function (Holder) {
    var elements = [
        {id: 1, label: 'foo'},
        {id: 2, label: 'bar'}
    ];
    $scope.holder = new Holder(elements);
}])

那我应该如何注册Holder课程?有哪些选项(如果有)?

并行,在Angular应用中使用本机JavaScript类不好(即不在框架中集成)?

您可以用工厂返回类

    .factory('Holder', function() {
        return (function (){
            this.foo = foo;
            this.bar = bar;
        });
    });

现在使用它

.controller('AnyController', ['Holder', function (Holder) {
    var holder = new Holder();
}]);

编辑如注释

所建议的,使用factory代替service

据我了解,工厂是单身人士,但是工厂可以生成可以创建实例的类。因此,当您注入构造函数时,工厂将返回对构造函数的引用,或者在构造函数周围的包装函数以不使用 new

的情况下使用它。
.factory('Holder', function() {
  function Holder(elements) {
    this.elements = elements; 
  }
  Holder.prototype.get = function() {
    return this.elements;
  };
  return function(elements) {
    return new Holder(elements);
  };
})
.controller('Main', function($scope, Holder) {
  var elements = [
    {id: 1, label: 'foo'},
    {id: 2, label: 'bar'}
  ];
  $scope.elements = Holder(elements).get();
});

最新更新