繁体   English   中英

Javascript,AngularJS-全局变量未正确分配

[英]Javascript, AngularJS - Global variable not being correctly assigned

从控制器访问时,范围变量$ scope.quizArray显示为未定义。 我之前进行过测试,绝对可以阅读下面的代码块。

 app.factory('getQuizService', function($http){
     return {
          getQuiz:function(videoId,scope){

          var $promise=$http.post("http://localhost/PHP/getQuiz.php", {'videoId': videoId});
                $promise.then(function(msg){

                          scope.quizArray = "TEST";

                        });
           }
     }
    });

控制器代码-服务通过以下方式调用:

function getQuizList(){
       getQuizService.getQuiz(videoIdService.getId(),$scope);
       alert($scope.quizArray);
      }

但是,警报会产生结果“未定义”而不是“测试”

谁能看到我哪里出问题了? 任何帮助,将不胜感激。 谢谢

您这样做是有原因的吗? 看一下下面的方法:

请参阅: http : //docs.angularjs.org/api/ng/service/ $ q有关承诺如何工作的更多信息。

例如,lib3d指出的方法起作用的原因是:

then(successCallback,errorCallback,notifyCallback)–无论何时或将要解决或拒绝承诺,然后在结果可用时立即异步调用成功或错误回调之一。 使用单个参数调用回调:结果或拒绝原因。 另外,在解决或拒绝承诺之前,通知回调可能被调用零次或多次以提供进度指示。

此方法返回一个新的Promise,可通过successCallback的返回值errorCallback进行解析或拒绝。 它还通过notifyCallback方法的返回值进行通知。 无法通过notifyCallback方法解决或拒绝诺言。

码:

app.factory('getQuizService', function($http){
 return {
      getQuiz:function(videoId,scope){

      return $http.post("http://localhost/PHP/getQuiz.php", {'videoId': videoId});

      //If you want to handle the promise here, you can include the $q service in your controller and do this:
      var deferred = $q.defer();
      $http.post("...").then(function(data) {
        //Special treatment here
        deferred.resolve(data)
      }, function(error) {
        deferred.reject(error)
      })

      return deferred.promise

      //As indicated by lib3d, you can directly do this as well:
      return $http.post("...").then(function(data) {
            //treatment
            return data
      }, function(error) {
            //error handling      
      });

 }
}).controller("Ctrl", function($scope, getQuizService) {

  getQuizService.getQuiz(1).then(function(data) {
    $scope.quizArray = data;
    //Code when everything goes ok,
  }, function(error) {
    //Code when everything goes false;
  })
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM