如何在工厂中使用set / get。我需要为工厂设置一个值(范围),所以我可以$ compile。但我似乎无法使语法正确或使其正常工作。以下有什么问题?如何将PrivateVar的值设置为$ scope。
我想打电话
format.setVar($scope)
- 在我的控制器中。
我的工厂看起来像这样..
pqpApp.factory('format', function ($compile, config) {
var PrivateVar = {};
var getVar = function () {
return PrivateVar
}
var setVar = function(value)
{
PrivateVar = value;
}
return {
getVar: getVar,
setVar: setVar
}
var formatter = {}
(functions go here)
return formatter;
答案 0 :(得分:2)
不确定我是否理解了你的问题但是你去了......
也许您会混淆三个不同的概念:服务/工厂/提供商。
一个简单的工厂可以这样做:
myApp.factory('MyFactory', function () {
var myFactory = {};
// myProperty
myFactory.myProperty = 'Hello';
// Set myProperty
myFactory.setProperty = function (value) {
this.myProperty = value;
};
return myFactory;
});
然后只需将工厂MyFactory
注入控制器并使用:
MyFactory.setProperty('World'); // Sets myProperty with value 'World'
$scope.property = MyFactory.myProperty; // Access myProperty value and save it to `$scope.property`
答案 1 :(得分:1)
如果我们按原样获取代码,那么您将尝试从同一工厂返回两个对象(第14行上的对象和最后一行上的格式化程序)。
为了在保持setVar
私有的情况下从工厂取回getVar
和PrivateVar
函数,您可以像这样编写工厂:
pqpApp.factory('format', function ($compile, config) {
var PrivateVar = {};
this.getVar = function () {
return PrivateVar;
}
this.setVar = function(value)
{
PrivateVar = value;
}
return {
getVar: this.getVar,
setVar: this.setVar
}
// or could just 'return this;'
}
然后你可以将PrivateVar
设置为你喜欢的控制器,即
pqpApp.controller('testCtrl', function($scope, format) {
format.setVar($scope);
})