【问题标题】:How do I create a new instance in a factory如何在工厂中创建新实例
【发布时间】:2015-05-07 16:54:21
【问题描述】:

我不知道如何在我的工厂中创建一个新实例。我在初始工厂创建了一个构造函数

app.factory('Tea',function(){

var Tea = function(name,description,price,caffeine, size ) {
    this.name = name;
    this.description = description;
    this.price = price;
    this.caffeine = caffeine;
    this.size = size;
}

Tea.prototype.toString = function(){
    var returnString='' ;
    returnString += "name" + this.name + "\n" +
    "description: " + this.description + "\n" +
    "price: " + this.price + "\n" + "caffeine: " + this.caffeine + "\n" + "size: " + this.size;

return returnString
}
return Tea;
})

在我的下一个工厂中,我确保注入 Tea,以便能够创建新实例。我创建了一个对象来存储我的数组并创建了一个推送新实例的方法

app.factory("DrinkList",function(Tea){

  var beverageList = {
    drinkLibrary: []
  };

  beverageList.newItem = function(){
    beverageList.drinkLibrary.push(new Tea);
  }
  console.log(beverageList);
  return beverageList;

  })

在我的控制器中,我确保引用了我创建的两个工厂。但是,drinkList.newItem 是未定义的。

 app.controller('myController', function($scope,Tea,DrinkList ) {

  $scope.drinkList = DrinkList.newItem();
  console.log(DrinkList.newItem());

});

【问题讨论】:

  • DrinkList.newItem() 不返回任何内容。可能会建议您更好地了解ng-model 如何自动为您构建对象属性,然后再被您的方向迷住了
  • 您也应该阅读此内容。人们说工厂/服务基本上是一样的,它们是一样的,但是对于你想要做的事情,它确实很重要。我会阅读它。 tylermcginnis.com/angularjs-factory-vs-service-vs-provider

标签: javascript angularjs oop angularjs-factory


【解决方案1】:

我一直在努力更好地掌握工厂和控制器。

在我的工厂中我创建了一个实例

app.factory('Drink',function($http) {
var Drink = function(name,description,caffeineLevel) {
    this.name = name;
    this.description = description;
    this.caffeineLevel = caffeineLevel;

}

return Drink;
})

这需要一些清理,但我意识到我需要在我的表单中使用 ng-model。我已经声明了一个可以重用的表单并将其存储在函数中。每次单击提交时,我都会创建新实例。我还需要学习更多内容,但这是一个开始。

app.controller('myController', function($scope,Drink,$http  ) {
var init = function() {
     $scope.defaultForm = {
        beverageName: "",
        description: "",
        caffeine: ""
    };
}
init();
// $scope.defaultForm = defaultForm;


$scope.allDrinkList = [];
$scope.drinkList= function(obj) {
    var newdrink = new   
    Drink(obj.beverageName,obj.description,obj.caffeine);
    $scope.allDrinkList.push(newdrink);
    console.log($scope.allDrinkList);
    init();

});

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多