我正在迁移我的 Angular 1.x 代码以使用更新、更首选的语法,避免使用 $scope 并将控制器用作语法。不过,我在从服务获取数据时遇到问题。
这是我的例子:
var myApp = angular.module('myApp', []);
myApp.controller('MainCtrl', ['$http', '$location', 'userService',
function($http, $location, userService) {
this.name = 'John Doe';
// this.userData = {
// }
this.userData = userService.async().then(function(d) {
return d;
});
console.log(this.userData);
}
]);
myApp.service('userService', function($http) {
var userService = {
async: function() {
// $http returns a promise, which has a then function, which also returns a promise
var promise = $http.get('https://jsonplaceholder.typicode.com/users').then(function(response) {
// The then function here is an opportunity to modify the response
// console.log(response);
// The return value gets picked up by the then in the controller.
return response.data;
});
// Return the promise to the controller
return promise;
}
};
return userService;
});
<body ng-app="myApp">
<div id="ctrl-as-exmpl" ng-controller="MainCtrl as mainctrl">
<h1>Phone Numbers for {{mainctrl.name}}</h1>
<button ng-click="">newest</button>
<p>{{mainctrl.userData}}</p>
<ul>
<li ng-repeat="users in mainctrl.userData">{{users.phone}} -- {{users.email}}</li>
</ul>
</div>
</body>
我遇到的这个问题是,从 userService.async 返回的数据是一个对象,我似乎无法深入了解从中获取数据,因为数据是 $$state 的子对象,它不能似乎在视图中使用。
如果这不是在 Controller As/$scope-less 语法中使用服务的正确方法,那么正确的方法是什么?