0

我正在用 Angular JS 和 StamPlay 创建一个小喊话框。因此,我创建了一些可以通过URL访问的“测试呐喊”

在我的 Angular 应用程序中,我创建了一个服务来获取数据:

app.factory('shouts', ['$http', function ($http) {

    return $http.get('https://shoutbox.stamplayapp.com/api/cobject/v1/shouts').success(function (data) {
        return data.data;
    });

}]);

在我的 MainController 中,我将数据附加到 $scope。

app.controller('HomeController', [
    '$scope',
    'shouts',

    function ($scope, shouts) {
        $scope.shouts = shouts;
    }

]);

但是,当我想通过数据 [] 重复 ng-repeat 时,我无法访问里面的对象。我不明白有什么问题。

<div ng-repeat="shout in shouts">
  {{shout.title}}
</div>

4

2 回答 2

0

即使您执行“返回 data.data”,喊叫也是 $promise。所以你需要在承诺解决时分配 $scope.shouts 。

app.factory('shouts', ['$http', function ($http) {

    return $http.get('https://shoutbox.stamplayapp.com/api/cobject/v1/shouts');

}]);

app.controller('HomeController', [
    '$scope',
    'shouts',

    function ($scope, shouts) {
       shouts.then(function(data) { $scope.shouts = data.data});
    }

]);

另一种选择是解决路由配置中的喊叫并将其注入控制器

$routeProvider
.when("/home", {
    templateUrl: "home.html",
    controller: "HomeController",
    resolve: {
        shout_data: shouts
    }


app.controller('HomeController', [
    '$scope',
    'shout_data',

    function ($scope, shout_data) {
       $scope.shouts = shout_data;
    }

]);
于 2016-03-18T16:14:39.960 回答
-1

您是否忘记将控制器附加到 HTML?

<div ng-controller="HomeController">
    <div ng-repeat="shout in shouts">
      {{shout.title}}
    </div>
</div>

有关 ngController 的更多信息:https ://docs.angularjs.org/api/ng/directive/ngController

于 2016-03-18T16:09:07.640 回答