Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在anjularjs中执行控制器之前,如何使用$http同步调用在.run()获取数据_Javascript_Angularjs_Http_Synchronous - Fatal编程技术网

Javascript 在anjularjs中执行控制器之前,如何使用$http同步调用在.run()获取数据

Javascript 在anjularjs中执行控制器之前,如何使用$http同步调用在.run()获取数据,javascript,angularjs,http,synchronous,Javascript,Angularjs,Http,Synchronous,在.run()中,我试图从URL获取数据,以便以后用作每个请求的头的一部分 因此,在.run()函数中,我使用$http.get获取数据(生成令牌)并分配给全局值 问题是即使在控制器初始化之后,$http.get仍将返回数据,因此,我如何从URL(同步)获取此数据(令牌),然后执行控制器的初始化。 这是我的密码: var appc=angular.module('app', []); appc.value('mytoken', ''); appc.value('RESTUrl', 'http:/

.run()
中,我试图从URL获取数据,以便以后用作每个请求的头的一部分

因此,在
.run()
函数中,我使用
$http.get
获取数据(生成令牌)并分配给全局值

问题是即使在控制器初始化之后,
$http.get
仍将返回数据,因此,我如何从URL(同步)获取此数据(令牌),然后执行控制器的初始化。 这是我的密码:

var appc=angular.module('app', []);
appc.value('mytoken', '');
appc.value('RESTUrl', 'http://localhost/token');
appc.run(function ($http, RESTUrl, $q, mytoken) {



$http.get(RESTUrl +'?user=currss').then (function (response)
{
    mytoken = response.data;
}, function (response) { console.log('error:' + response.data);}
);
--控制员:

appc.module('ctrl',[])
.controller('ctrl', function ($scope, $http,mytoken,MyService) {
console.log("controller inistializing !");

MyService.getinfo(mytoken)
    .then(function (response) {
       $scope.DataList = respone.data;

    }, function (response) {
        console.log(response.status);
        console.log(response.data)
    }
    )

.catch(function (response) {
    $window.alert('error');
});

}) 

不可能。另外,强迫角度(通常是JavaScript)同步也是错误的模式

正确的做法是将令牌放在服务中并从那里访问它。服务返回的值是实际承诺

module.service('Authentication', function ($http, RESTUrl, $q, mytoken) {
    var tokenDeferred = $q.deferred();
    $http.get(RESTUrl +'?user=currss').then (function (response){
        tokenDeferred.resolve(response.data);
    }, function (response) {
        tokenDeferred.reject(response);
    });

    this.getToken = function() {
        return tokenDeferred.promise;
    };
});
然后像这样使用它:

Authentication.getToken().then(
    function(data) {
        // success function
    },function(errMsg) {
        // error function
    }
)

我将建议您在成功登录后从后端获取令牌,并将此令牌存储到任何服务变量或cookie中。因此,在移动到仪表板之前,通过登录响应,您将令牌存储在应用变量中