javascript - 我应该如何将异步服务中的数据设置到 Controller $scope 中?

标签 javascript angularjs

我的页面中的所有服务器数据访问均由我的 RequestFactory 提供程序执行。 (RequestFactory 使用 $http 来执行实际的服务器调用。)

我的 Controller 范围引用了从 RequestFactory 返回的数据列表。

我的问题是,由于 RequestFactory 调用是异步的,并且 RequestFactory 没有(也不应该)访问 Controller 范围,那么 RequestFactory 将数据移交给 Controller 的正确方法是什么?

var requestFactory = {};
angular.module("myApp").factory("RequestFactory", function($http) {
    requestFactory.fetch = function() {
        $http.get(url).
            success(function(data) {
                controller.setData(data)
            }).
            error(function(data, status) {
                console.info("fetch Failed. Error code: " + status + " Url:" + url);
            }).finally(function() {
                controller.setSubmitting(false);
            });
    };
    return requestFactory;
});

最佳答案

你应该返回工厂的 promise 。请参阅下面的代码片段。

.factory("RequestFactory", function($http) {
   return {
     fetch : function() {
        return $http.get(url).then(function(result) {
           return result.data;
        });
     }
   }
});

在你的 Controller 中你应该使用像

.controller('MainCtrl', function($scope, RequestFactory) {
  RequestFactory.fetch().then(function(data) 
     $scope.foo = data;
  });
});

关于javascript - 我应该如何将异步服务中的数据设置到 Controller $scope 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31837014/

相关文章:

angularjs - ExpressJS 下使用 HTML5 url 模式的 AngularJS SEO

javascript - 为什么 AngularJS $scope 无法正常工作?

angularjs - 如何使用 angularjs 在单击时切换媒体编辑器选项

javascript - 如何在循环或每个数组元素中使用 .clone() ?

javascript - 如何在不破坏我的网页的情况下向我的 div 添加滚动条

javascript - 如何从 Javascript 检测浏览器操作系统?

javascript - 如何隐藏 Chart.js 上的刻度线?

javascript - 如何在不使用 HTML <!--[if]--> 的情况下根据浏览器版本选择 jQuery 版本

javascript - 使用弹出式键盘进行 Tab 键需要选择和取消选择文本框

javascript - 使用 Angular DataTable 显示 JSON 数据