gpt4 book ai didi

javascript - 如何从 Angularjs 服务响应中获取数据到 Controller 作用域对象

转载 作者:行者123 更新时间:2023-11-30 19:12:43 25 4
gpt4 key购买 nike

我有一个简单的 Angularjs 1.7 应用程序。一切正常,我能够从 web API 获取数据到 angularjs 服务。当我调试 Angularjs 服务时,我可以看到数据是通过 Web API 从数据库中获取的。所以我使用 angularjs Controller 中的服务将数据提取到范围对象中。但是我不确定为什么没有在 Controller 范围对象中获取数据。有什么我想修复的吗?

Service.js

(function () {

var app = angular.module('myApp');

app.factory('websiteService', function ($http, $q) {
var factory = [];
var deferred = $q.defer();
var baseURI = 'http://localhost:59029/api';

factory.getAllStudents = function () {
$http({
method: 'GET',
url: baseURI + '/Website/GetAllStudents'
}).then(function (response) {
deferred.resolve(response);
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
}

return factory;
});
})();

Controller.js

(function () {

var app = angular.module('myApp');

app.controller('websiteController', ['$scope', '$http', 'websiteService', '$filter',
function ($scope, $http, websiteService, $filter) {
$scope.TestWebsite = "TestWebsite";
console.log($scope.TestWebsite);

//GET Students
websiteService.getAllStudents()
.then(function (response) {
$scope.FetchedAllStudents = response;
// NOT ABLE TO FETCH THE DATA HERE
}, function (error) {
// error handling here
});
}
]);
})();

最佳答案

没有必要使用 $q.defer 制造一个 promise ,因为 $http 服务已经返回一个 promise :

app.factory('websiteService', function ($http, $q) {
var factory = [];
̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
var baseURI = 'http://localhost:59029/api';

factory.getAllStudents = function () {
return $http({
method: 'GET',
url: baseURI + '/Website/GetAllStudents'
}).then(function (response) {
return response.data;
});
}
return factory;
});

有关详细信息,请参阅 Is this a "Deferred Antipattern"?

关于javascript - 如何从 Angularjs 服务响应中获取数据到 Controller 作用域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58313606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com