を保持します。Angularjsは、私は、このような工場を持ってローカル変数
このオブジェクトの適切なインスタンスを作成するにはどうすればよいですか?
objectName
の値を工場の他の機能で使用したいと思います。
を保持します。Angularjsは、私は、このような工場を持ってローカル変数
このオブジェクトの適切なインスタンスを作成するにはどうすればよいですか?
objectName
の値を工場の他の機能で使用したいと思います。
Angularでは、ファクトリはシングルトンなので、インスタンスは常に同じです。
次の操作を行うことができます
TestFactory= function() {
var objectName={};
return {
SetName:function(property,name) {
objectName[property] = name;
},
GetName:function(property) {
return objectName[property];
},
Clear:function(property) {
delete objectName[property]
}
}
}
次に、あなたのコントローラに:問題の
TestController = function($scope, TestFactory) {
$scope.TestClick = function() {
TestFactory.SetName('a','test A')
TestFactory.SetName('b','test B')
console.log('A', TestFactory.GetName('a')); // test A
console.log('B', TestFactory.GetName('b')); // test B
}
}
カップル。まず、工場の関数ではなくオブジェクトを返す。
app.factory('TestFactory', function() {
return function() {
var objectName = null;
var setName = function(name) {
objectName = name;
};
var getName = function() {
return objectName;
};
return {
SetName: setName,
GetName: getName
};
};
});
次に、あなただけのようにインスタンス化することができます
var tstA = new TestFactory();
var tstB = new TestFactory();
サービスや工場がシングルトンているので、私はあなたがそのInit
機能を提供することにより、工場のより適切な使用と望むものを達成することができると思います次のように共通コードと一意の名前を返します。
angular.module('app')
.factory('ServiceFactory', serviceFactory);
function serviceFactory() {
return {
Init: function (name) {
return {
objectName: name,
setName: function (name) {
this.objectName = name;
},
getName: function() {
return this.objectName;
}
};
}
};
}
これは、多くの型を初期化できるファクトリとして使用する可能性を残しています。
基本的に単純なゲッター/セッターを作成する必要があります。
angular.module('app', [])
.controller('TestController', testController)
.service('serviceFactory', serviceFactory);
testController.$inject = ['serviceFactory'];
function testController(serviceFactory) {
serviceFactory.set('A', {
name: 'test A'
});
serviceFactory.set('B', {
name: 'test B'
});
console.log(serviceFactory.getAll());
console.log(serviceFactory.get('A'));
console.log(serviceFactory.get('B'));
}
function serviceFactory() {
var
_model = {
name: ""
},
_data = {};
return {
set: function(key, data) {
_data[key] = angular.extend({}, _model, data);
},
get: function(key) {
return _data[key];
},
getAll: function() {
return _data;
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<body ng-app="app" ng-controller="testController"></body>
ので、私は は、ソリューションに満足して動作しなくなり、いわば見るために各後件機能魔女キーを伝える必要があります:) – Jester
私は、これはそれを取得としてそれが最も近いCOS受け入れ。この周りに来る人々のためだけに。この要件を回避する方法を見つけてください。私はすべての関連するデータを持つオブジェクトを工場の連続した各関数呼び出しに渡してしまったので、上記の必要性はありません。それはちょっと「角度的な方法」ではないので、 – Jester