在同一工厂的函数中使用函数并传递$ scope(AngularJS)

时间:2016-04-26 19:26:09

标签: javascript angularjs

我正在建造一个具有多种功能的工厂。结构如下:

app.factory('Service', function() {

    var Service = {};
        Service.method1 = function($scope) {
        //logic
        return something1
        };
        Service.method2 = function($scope) {
        return something2
        };
        Service.method3 = function($scope) {
        return something3
        };
        Service.method4 = function($scope, Service) {
        var object1 = Service.method1($scope)
        var object2 = Service.method2($scope)
        var object3 = Service.method3($scope)

        //do something with object 1,2,3 and return the result
        return result
        };

这是在工厂内其他功能内的工厂中使用功能的正确方法吗?而且我不确定我是否可以像这样通过$ scope。

2 个答案:

答案 0 :(得分:0)

回答问题1

您可以从self

调用内部服务功能
var moduleA= angular.module('A',[]);
moduleA.factory('Service', function() {
    var self = this;
    self.method1: function() {
            alert('a');
        },
    self.method2: function() {
            self.method1();
        } 
    };
});

然后你可以像这样打电话给你的工厂服务

angular.module('B',['A']).controller('BCtrl',function($scope,'Service'){
    Service.method2();
});

回答问题2

服务不应更改任何$scope。您通常不会在工厂,服务或提供商内使用$scope。但是,您可以在工厂的函数构造函数中注入$rootScope依赖项并使用它。

module.factory( 'Service', function($rootScope){
    $rootScope.value = "value";
});

答案 1 :(得分:0)

工厂需要返回服务对象。持久数据在工厂函数中声明为var

app.factory('Service', function() {

    //Declare persistant data here
    var persistantData;

    var Service = {};

    Service.method1 = function(arg) {
        //logic
        return something1;
    };
    Service.method2 = function(arg) {
        return something2;
    };

    //return service object
    return Service;
};

用法:

app.controller('ctrl1', function($scope, Service) {
    $scope.out1 = Service.method1($scope.in1);
});

存储在持久数据中的任何内容都将持续应用程序的整个生命周期。