2016-12-29 7 views

答えて

2

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 

    } 
} 
+0

ので、私は は、ソリューションに満足して動作しなくなり、いわば見るために各後件機能魔女キーを伝える必要があります:) – Jester

+0

私は、これはそれを取得としてそれが最も近いCOS受け入れ。この周りに来る人々のためだけに。この要件を回避する方法を見つけてください。私はすべての関連するデータを持つオブジェクトを工場の連続した各関数呼び出しに渡してしまったので、上記の必要性はありません。それはちょっと「角度的な方法」ではないので、 – Jester

1

カップル。まず、工場の関数ではなくオブジェクトを返す。

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(); 
1

サービスや工場がシングルトンているので、私はあなたがその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; 
       } 
      }; 
     } 
    }; 
} 

これは、多くの型を初期化できるファクトリとして使用する可能性を残しています。

0

基本的に単純なゲッター/セッターを作成する必要があります。

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>

関連する問題