【问题标题】:why i get $$State variable with a service angularjs为什么我使用服务 angularjs 获得 $$State 变量
【发布时间】:2017-03-28 02:21:08
【问题描述】:

我想从控制器的变量中获取我的服务,但它给了我一个 $$state 对象

这是我的控制器

$scope.myDataSMS = ServiceSms.async().then(function(data){
    $scope.myDataSMS1 = data;
    console.log($scope.myDataSMS1);

    return $scope.myDataSMS1;
});

console.log($scope.myDataSMS);

和我的服务

routeAppControllers.factory('ServiceSms', function($http,Token) {

    var key = Token.CreateToken()

    var myService = {

        async: function() {

            var data = 'token=' + encodeURIComponent(key);

            var promise =  $http({
                method: 'POST',
                url: 'PhpFunction/getsms.php',
                data: data,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            })

                .then(function(data) {

                    // The then function here is an opportunity to modify the response
                  //   console.log(data.data);

                    // The return value gets picked up by the then in the controller.
                    return data.data;
                })

            // Return the promise to the controller
            return promise;
        }
    };
    return myService;
});

我认为问题在于承诺,但我有点卡住了

如果有人可以帮助我,请

提前致谢

【问题讨论】:

  • 这个“$$state 对象”在哪里的问题还不够清楚。首先,我确定它不会给你 $$state 对象。它为您提供了一个包含 $$state 属性的对象(promise)。当然,console.log($scope.myDataSMS) 会输出一个 promise。因为 myDataSMS 是一个承诺。而 myDataSMS1 是承诺结果。

标签: angularjs


【解决方案1】:

这样写你的承诺会更好:

控制器:

.controller('nameofcontroller', ['$scope', 'ServiceSms', function($scope, ServiceSms) {
    $scope.myDataSMS = ServiceSms.async()
      .then(
        function(data){
          $scope.myDataSMS1 = data;
          console.log($scope.myDataSMS1);
          return $scope.myDataSMS1;
        },
        function(err){
          console.log('err: ' + err);
        });
}]);

服务:

routeAppControllers.factory('ServiceSms', function($http,Token) {
   return {
      async: function() {
        var data = 'token=' + encodeURIComponent(key);
        return $http({
           method: 'POST',
           url: 'PhpFunction/getsms.php',
           data: data,
           headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        });
      }
    }
});

【讨论】:

  • 感谢您的回复,但它给了我一个承诺,如何获得我的元素 Promise { : "pending" }
  • 您仍然需要使用.then() 在控制器中执行承诺。也许您没有将范围变量设置为正确的对象。也许试试$scope.myDataSMS1 = data.data;
  • @Gazano 请说得更清楚一些,如果可以的话,还请提供一个小提琴或错误。
  • @estus 你是对的,在这种情况下返回一个承诺是多余的,因为 $http 已经返回一个。检查编辑,现在应该很好。不错的收获!
  • 是的,现在看起来不错。我不确定我是否正确理解了这个问题,但可能根本不应该将 $scope.myDataSMS 分配给承诺。看起来 OP 预计它将被分配给结果,但这不会发生。
猜你喜欢
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2019-08-20
相关资源
最近更新 更多