javascript - Angular : Asynchronous Promise in Switch Statement

标签 javascript angularjs

我有一个 Controller :

app.controller('myController', function ($scope, myService) {

    $scope.pageData = {};


    myService.promiseGetDataFromServer()
        .then(function (response) {
        $scope.pageData = response.data;

    }, function (reason) {
       // error has occurred.. etc...
    });
}

到目前为止,一切正常。但是,我想根据一些确定性逻辑来填充 $scope.pageData 。我试过这个:

app.controller('myController', function ($scope, myService2, thing) {

   $scope.pageData = {}

   switch (thing)
   {
       case 'whatever':
         myService2.promiseGetWhateverFromServer()
            .then(function (response) {
            $scope.pageData = response.data;

         }, function (reason) {
           // error has occurred.. etc...
         });
        break;

        case 'something':

          myService2.promiseGetSomethingFromServer()
              .then(function (response) {
              $scope.pageData = response.data;

           }, function (reason) {
              // error has occurred.. etc...
           });
           break;
   }

}

没有服务器错误,我记录了响应,一切都很好,但我的 View 没有呈现,因为我怀疑 $scope.pageData 的属性未定义。

我该如何解决这个问题?我希望在 switch 语句解析后加载 View 。

最佳答案

如果我的理解正确,您可以将逻辑与选择适当的服务和执行请求分开,如下所示:

app.controller('myController', function ($scope, myService2, thing) {

   $scope.pageData = {};

  //here we select service
  $scope.getDataForPageData = function(parameter){
    var serviceToSelect;

     switch (parameter)
     {
         case 'whatever':
           serviceToSelect = myService1;
          break;

          case 'another'
          serviceToSelect = myService2;
          break;
     }

     return serviceToSelect;

  }

  //do request and assign $scope.pageData when resolved
  $scope.getDataForPageData(thing).promiseGetSomethingFromServer()
        .then(function (response) {
            $scope.pageData = response.data;

        }, function (reason) {
           // error has occurred.. etc...
        });

}

关于javascript - Angular : Asynchronous Promise in Switch Statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466475/

相关文章:

javascript - 将 Drupal 优化的 CSS 和 JS 用于 Drupal 之外的其他文件

javascript - Node.js 中的二进制字符串到缓冲区

search - AngularJS 搜索更改事件

javascript - AngularJS 链接 $http get 请求

javascript - Angular ui-bootstrap datepicker更改主题

javascript - 我什么时候应该使用多个事件名称和不同的事件发射器?

javascript - 您可以调用 Jbuilder 来创建原生 Rails 对象而不是呈现的字符串吗?

javascript - 如何在js中为特定类型创建一个集合?

javascript - 在 NavBar AngularJs 中显示表单 OnClick

javascript - 如何在 AngularJS 的父 Controller 或作用域中访问 FormController