javascript - AngularJS 在初始化仪表板 Controller 之前使用 $htttp 获取仪表板设置

标签 javascript angularjs

所以我仍在 Angular 速成类中。我正在开发一个相当复杂的仪表板框架,全部用 Angular 编写。在加载 Controller 之前,我需要首先使用 $HTTP 从服务器获取一堆仪表板设置。然后,这些设置用于控制仪表板的布局。 所以我读到的 Angular 构建方式是首先运行配置方法,然后运行方法,然后是 Controller 。 我无法在配置方法中使用 $HTTP,因此我在 main.js 中构建了它:

    MetronicApp.run(['$rootScope','$http', function($rootScope,$http) {

  var CUID = Cookies("CUID");
  console.log('portlet settings for '+ CUID);
   $http.get('/myurl/V3_portlet_settings?p_user_id='+CUID)
        .then(function(response) {
            console.log(response.data);
            console.log('portlet status: ' + response.status);
            $rootScope.$broadcast("dashSettings",response.data);
        });

}]);

当我运行时,这一切都很顺利,我在控制台中看到了数据。

然后在我的 Controller 中:

$scope.$on( "dashSettings", 
function(event,data){
    $scope.dData = data;
     console.log('dash data service identified in dash controller');
     console.log($scope.dData.count);
    } );

几个问题:

  1. 这是在初始化仪表板之前获取设置的最佳方式吗?我的计划是将构建破折号的调用嵌入到我的 $scope.$on block 中。我开始研究如何在 Controller 初始化之前同步运行 run 方法,但也许我不需要。

  2. 有任何明显的想法为什么 $scope.$on 方法似乎没有触发吗?

提前致谢

最佳答案

另一种方法是将您的 $http 函数放置在服务或工厂中,然后在 Controller 中解析它们。 这里的关键是promise的使用。 Angular 文档将其描述为

A service that helps you run functions asynchronously, and use their return values (or exceptions) when they are done processing

首先创建一个服务:

app.factory('DataService', function($http) {
  var getValues= function() {
    var url = '/myurl/V3_portlet_settings?p_user_id='+ CUID;
    return $http.jsonp(url) // returns a promise
  };

  return {
    getValues: getValues
  }
});

然后在你的 Controller 中:

myApp.controller('MyController', function ($scope, DataService) {     
    DataService.getValues().then( // resolve the promise using .then()
    function(data){
      // successcallback
      // you can now safely populate the data in you controller
      console.log(data);
    },
    function(error){
      // errorcallback
      console.log(error);
    })   
});


我认为使用数据服务来处理$http请求等数据操作是更好的方法。
promise 的返回允许链接(多个) promise 并更好地处理异步调用。

您可能会发现John Papa's style guide很有用,尤其是有关“单独数据调用”(Y060) 和“从数据调用返回 Promise”(Y061) 的部分

关于javascript - AngularJS 在初始化仪表板 Controller 之前使用 $htttp 获取仪表板设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357907/

相关文章:

javascript - jQuery 插件、上下文和 setTimeout

javascript - 错误: [$compile:tplrt] Template for directive 'footer' must have exactly one root element

angularjs - AngularJS 中的 .$on() 是什么

javascript - 如何创建 Angularjs 部分更新(补丁)?

javascript - 如何为以下 Angular 函数编写单元测试用例

javascript - 有没有办法使用 jquery 从属性中删除特定值?

javascript - 为什么使用keys过滤器而不是columns.slice()?

javascript - iOS6 中没有删除 Angular 1.2.5 动画类

javascript - 为什么 Angular 不允许我将参数传递给提供者的 useFactory 中的函数?

javascript - Angular ,函数回调的正确方法