【问题标题】:angular factory. how to create new instances of the factory?角工厂。如何创建工厂的新实例?
【发布时间】:2018-01-10 23:37:18
【问题描述】:

我正在尝试创建工厂的新实例,但是它始终打印最后一个实例(因为它的单例)。 每次使用 new 关键字创建时,如何实现新实例? 我创建了我在 jsfiddle.net 中尝试实现的示例 谢谢。

angular.module('mainModule', []);

  Crud.$inject = ['$http'];

    function Crud($http) {

        function CrudFactory(crudDTO) {
            var vm = CrudFactory;
                        vm.x = 1;
            vm.addX = addX;
            vm.getX = getX;
            vm.print = print;

            function addX(){
                vm.x +=1;
            }
            function getX(){

                return vm.x;
            }
            function print(){
                console.log(crudDTO.entity);
            }

            return vm;
        }

        return CrudFactory;
    }

    angular
        .module('mainModule')
        .factory('Crud', Crud);


    angular.module('mainModule').controller('mainCtrl', function($scope,Crud){
    var a = new Crud({entity:"test1"});
    var b = new Crud({entity:"test2"});
    //a.addX();
    //$scope.a =b.getX();
    a.print();
    b.print();
    a.print();
});

【问题讨论】:

  • 把 vm 从 CrudFactory 改成这个
  • vm 应该用于控制器;在工厂中使用它对我来说没有任何意义(我们在控制器中绑定视图/tpl 和模型)。

标签: javascript angularjs angular-factory


【解决方案1】:

您错误地引用它。您必须使用 this 而不是再次使用函数名称来引用被调用函数的实例。

相反

var vm = CrudFactory;

改变

var vm = this;

工作演示

http://jsfiddle.net/haqL7m5q/2/

【讨论】:

  • 如果工厂是单例的,如何创建新实例?
  • 您可以查看此链接以获取更多详细信息stackoverflow.com/questions/16626075/… ?检查小提琴,看看我们如何使用对象来触发工厂中的功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多