【问题标题】:$scope not able to get data from factory using $http.get in Angularjs$scope 无法在 Angularjs 中使用 $http.get 从工厂获取数据
【发布时间】:2016-10-27 17:36:52
【问题描述】:
<script>
var app = angular.module('myApp', ['ngMaterial']);

app.factory('factoryProvider', function ($http, $q) {
    var facObj = {};
    facObj.getLastWorkplace = $http.get('plugins/wcf-service/ServiceProvider.svc/getLastWorkPlacesJSON')
        .then(function (response) {
            return response.data;
        });
    return facObj;
});

app.controller('dashboardController', function ($scope, factoryProvider) {

    factoryProvider.getLastWorkplace.then(function (successResponse) {
        $scope.wp = successResponse;
        console.log('inside');
        console.log($scope.wp); // Return an object that I want
    });
    console.log('outside');
    console.log($scope.wp); // $scope.wp is empty
});

外部控制台日志首先运行,内部控制台日志是第二个。问题是 $scope.wp 只能在 getLastWorkplace 回调函数中获取数据,它不能将数据绑定到 ng-model(使用 wp.property)。如何解决? 感谢您的阅读

【问题讨论】:

  • 我认为你应该使用 $promise 来绑定对象。
  • 好的,它在外面工作,但 $scope.wp 是一个 $$state : 对象。如何访问数据

标签: angularjs asynchronous factory httpservice


【解决方案1】:

您分配了两次$scope.wp,最后的分配是您的getLastWorkplace 调用的返回值(您没有返回任何内容。)

改成这个……

factoryProvider.getLastWorkplace.then(function (successResponse) {
    $scope.wp = successResponse;
});

或者...

$scope.wp = factoryProvider.getLastWorkplace;

但不是两者兼而有之。

【讨论】:

  • $scope.wp 可以接收我想要的数据,但它仍然不会将数据绑定到 ng-model
  • 在致电您的提供商之前尝试分配$scope.wp = {}。您的最后一个 console.log 仍然是空的,因为它在您的承诺解决之前运行。另外,如果它仍然不起作用,请发布您的模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多