javascript - 在angularJS中绑定(bind)服务数据

标签 javascript angularjs

我有一个用于在 2 个 Controller 之间共享数据并检索数据列表的服务:

myApp.service('DataService', function($http) {
    this.data = [];
    this.loadData = function() {
        $http.get('/api/data').success(function(data) {
            this.data= data;
        })
    };

});

在我的 Controller 中调用:

myApp.controller('appController', function($scope, DataService) {
    $scope.DataService= DataService;
    DataService.loadData();
});

并显示在这里:

<div ng-controller="appController">
    <li ng-repeat='item in DataService.data'>
        <a href="#item/{{item.ID}}"> View Item</a>
    </li>
</div>

运行时,它不显示任何内容。 我用一些警告框运行它,可以看到数据列表中填充了我想要显示的数据,但没有显示其他信息。

最佳答案

您没有正确使用您的服务。现在,Angular 很难监视服务属性的变化。与其将数据存储为自身的属性,不如简单地将其返回给调用者。尝试:

myApp.service('dataService', function($http) {
    this.loadData = function() {
        return $http.get('/api/data').then(function(data) { return data; });
    }
}

然后在 Controller 中调用它,例如:

myApp.controller('appController', function($scope, dataService) {
    $scope.data = dataService.loadData();
});

并绑定(bind)到像这样的 View 中:

<div ng-controller="appController">
    <li ng-repeat="item in data track by $id">
        <a href="#item/{{ item.ID }}">View Item</a>
    </li>
</div>

关于javascript - 在angularJS中绑定(bind)服务数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23697863/

相关文章:

angularjs - 如何在e2e测试中触发 'swipeleft'事件( Protractor )

angularjs - 为什么 bower 更新 Angular 不升级我的 Angular ?

angularjs - 如何将纯 Angular 应用程序从 Visual Studio Team System 部署到 Azure 网站

javascript - 从 URL AngularJS 加载 HTML 内容

javascript - 当一直滚动到 div 末尾时,无限滚动不起作用

javascript - 不允许粘贴任何非字母数字字符

javascript - Backbone Marionette 将变量传递给 view 方法

javascript - Angular : filter to replace and complete relative <a href ="/"> paths

javascript - 将参数从 View 传递到 javascript

javascript - 为数组创建像 ngModel 这样的 AngularJS 指令