Глобальные переменные как сервис в angularjs - PullRequest
0 голосов
/ 15 декабря 2018

У меня проблема с использованием глобальных переменных в angularjs. Я видел этот вопрос Глобальные переменные в AngularJS , и ответ работал нормально, но я хочу вернуть в свой сервис что-то вроде

bookModule.factory('UserService', function (viewModelHelper) {
    function get() {
        var rt;
        viewModelHelper.apiPost('Language/getLanguageIsArabic', null,
            function (result) {
                rt = result.data;
                console.log(rt);
                return rt;
            });
        }
    return {
        name: get()
    };
});

Консоль печатает значение как «true», что мне и нужно.Но в моем контроллере я пытаюсь напечатать значение, и оно печатает неопределенное

bookModule.controller("bookHomeController",
function ($scope,  bookService, UserService, viewModelHelper, $filter) {
 $scope.arabic = UserService.name; 
 console.log($scope.arabic);     
}

Может кто-нибудь помочь мне, пожалуйста !!!

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Можете ли вы попробовать и посмотреть, если вы получите результаты?

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, UserService, viewModelHelper) {
    $scope.arabic = UserService.getter(viewModelHelper); 
    console.log($scope.arabic.name); 
});

app.service('UserService', function(){
    this.getter = function (viewModelHelper) {
        var rt;
        viewModelHelper.apiPost('Language/getLanguageIsArabic', null,
            function (result) {
                rt = result.data;
                console.log(rt);
                return {
                        name: rt
                    };
            });
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js">
</script>
<div ng-app="myApp" ng-controller="myCtrl">
    <p>The return from this page is:</p>
    <h3 ng-if="arabic">{{arabic.name}}</h3>
</div>
0 голосов
/ 15 декабря 2018

Прежде всего, если ваш пост-запрос асинхронный, рассмотрите возможность использования асинхронного чтения, и если значение чтения нужно прочитать только один раз, вы можете обратиться к моему пути ниже.

Вот мое определение,Я надеюсь, что это будет полезно для вас.

1. Определение:

bookModule.Service('UserService', function (viewModelHelper) {
    var name='';
    this.get = function() {
        var deferred = $q.defer();
        if(!name)
        {
            //Because requests are asynchronous, it is recommended to read them asynchronously.
            viewModelHelper.apiPost('Language/getLanguageIsArabic', null,
            function (result) {
                deferred.resolve(result.data);
                name = result.data;
            });
        }else{
            deferred.resolve(name);
        }

        return deferred.promise;
    }
});

2.Использование демонстрации:

UserService.then(function(data){
   console.log(data); 
})
...