AngularJS:如何从服务中检索返回值

时间:2015-07-26 12:47:28

标签: javascript angularjs angularjs-service angularjs-factory

我正在关注Angular Services的教程并测试下面提到的代码。我可以从TestService喜欢 -

获取视图中的值

TestService.name& TestService.$get()

但我想知道如果我需要从函数返回一个值,例如 - return "From myFun"+this.name;

代码 -

var myApp = angular.module('myApp', []);

myApp.controller('mainCtrl', function($scope, TestService){
    $scope.service = "Data From Service: "+TestService;
});

var myFun = function() {
    this.name = "FirstName";

    this.$get = function() {
        this.name = "Second Name";
        return "From $get: "+this.name;
    };

    return "From myFun"+this.name;
};

// A service returns an actual function
myApp.service('TestService', myFun);

1 个答案:

答案 0 :(得分:1)

  

<强>服务

     

服务是一个构造函数,它使用the创建对象   新关键字。您可以向服务对象添加属性和功能   通过使用this关键字。与工厂不同,它不会返回   任何东西(它返回一个包含方法的对象)。

服务确实放置了this,它是该服务的上下文,然后返回该上下文。

简单地说你不能从服务返回对象,你可以使用工厂来做,因为工厂确实返回object

<强>工厂

var myApp = angular.module('myApp', []);

myApp.controller('mainCtrl', function($scope, TestService){
    $scope.service = "Data From Service: "+TestService;
});

var myFun = function() {
    var name = "FirstName";
    return "From myFun"+this.name;
};

// A service returns an actual function
myApp.factory('TestService', myFun);

但是在上面的情况下,你一次只能返回一个值,用于添加你需要修改你将要从工厂返回的对象的函数。

修改工厂

var myApp = angular.module('myApp', []);

myApp.controller('mainCtrl', function($scope, TestService) {
    $scope.service = "Data From Service: " + TestService;
});

var myFun = function() {
    var TestService = {};
    TestService.name = "FirstName";
    TestService.get = function() {
        TestService.name = "Second Name";
        return "From myFun" + TestService.name;
    };
};

// A service returns an actual function
myApp.factory('TestService', myFun);

Working Plunkr

有关详细信息,请阅读this answer,其中说明了如何实施服务和工厂。