2015-07-01 55 views
2

考慮到下面的工廠,我需要在創建對象時通過id,但是當我創建工廠時,我無法傳遞參數,因爲我無效的提供程序。如何傳遞參數?Angular:如何創建一個工廠對象傳遞參數

在控制器:

var canvas = new FactoryCanvas(123); 

工廠:

angular.module('app') 
.factory('FactoryCanvas', function(id) { 

    var Canvas = function (id) { 
     this.id = id; 
     alert(id); 
    };  

    return Canvas;  
}); 
+0

你創建一個類只能用。服務。在工廠中,你返回一個具有函數的對象 – gr3g

+0

這給出了關於如何使用工廠的相當好的解釋:https://docs.angularjs.org/guide/providers#factory-recipe – seanhodges

回答

0

給出關於兩個(只是語法)之間的差別更好的解釋,加入了更多的功能,有助於

有廠家

var canvas = FactoryCanvas.Canvas(123); 


angular.module('app') 
.factory('FactoryCanvas', function() { 
    // This is private 
    var x = "x"; 
    var foo = function foo(){ 
     return "foo"; 
    } 
    // This is public and can be accessed by the controller 
    return { 
     Canvas : function (id) { 
     alert(id); 
     }, 
     getX : function(){ 
      return x; 
     }, 

     getFoo : foo 

    }; 
}); 

隨着服務

var canvas = FactoryCanvas.Canvas(123); 


angular.module('app') 
.service('FactoryCanvas', function() { 
    // Angular automatically creates a `new` object when called 
    // This is private! 
    var x = "foo"; 
    var y = function(){ 
     return "foo"; 
    }; 
    // This is public 
    this.Canvas = function (id) { 
     alert(id); 
    }; 
    this.getX = function(){ 
     return x; 
    }; 


}); 

從AngularJS運行起來

出廠定義您的服務,如果:
- 你跟編程
的功能性的風格 - 你喜歡返回函數和對象。

很難相信這是唯一的區別,但它是。
正如您所看到的,服務更具可讀性。

+0

什麼時候應該使用它們? – ps0604

+0

我可以給你一行「AngularJS啓動並運行」 – gr3g

+0

在這裏,你去。我也會更新'工廠' – gr3g

1

你的工廠定義是錯誤的,從工廠定義中刪除ID參數,你會得到無效的提供者錯誤。 Angular試圖向工廠注入id,這實際上並不是你想要的。

myApp.factory('FactoryCanvas', function() { // removed id 

    var Canvas = function (id) { 
     this.id = id; 
     alert(id); 
    };  

    return Canvas;  
}); 

JSFiddle

-1

你需要這樣的

app.factory('Customerdetail',function($resource) { 
return { 
query: function(image_url) { 
    return $resource('customer/details', {}, { 
     query: { method: 'GET', params: {imageUrl:image_url}, isArray: false } 
    }).query(); 
    } 
} 
}); 

創建關閉現在您的控制器,你可以寫

function IndexCtrl($scope, Customerdetail) { 
    $scope.text = Customerdetail.query("YOUR/IMAGE/URL"); 
} 
相關問題