设置/进入工厂

时间:2015-05-08 13:29:23

标签: angularjs

如何在工厂中使用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;

2 个答案:

答案 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私有的情况下从工厂取回getVarPrivateVar函数,您可以像这样编写工厂:

    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);
})