0

我正在使用工厂获取文件夹列表并将其显示在前端。同样在前端,我有可以将新文件夹添加到现有列表的表单。添加文件夹后,我想刷新我的工厂实例并显示更新的文件夹列表。

// 工厂

angular.module('myapp').factory('archiveService', ['$http', 'ApiUrl', function($http, ApiUrl) {
var archiveService = function() {
    this.repos = [];
    this.busy = false;
    this.page = 0;
};
archiveService.prototype.nextPage = function() {
    if (this.busy) return;
    this.busy = true;
    var url = ApiUrl.url + '/folders/?page=' + this.page;
    $http.get(url).then(function(res) {
        console.log(res);
        this.repos = res.data;
        if (items.repos == 0) {
            return;
        }
        this.page += 1
        this.busy = false;
    }.bind(this)).catch(function(data) {
    }.bind(this));
};
return {
    archiveService: archiveService,
}

}]);

// 这是我的控制器

angular.module('myapp').controller('archiveModalController', ['$rootScope', '$scope','archiveService', function($rootScope, $scope, archiveService) {

// I want to refresh this and show new data on update

    $scope.archivelist = new archiveService.archiveService();

}])

我想知道如何刷新以便获取新的更新数据

$scope.archivelist = new archiveService.archiveService();

4

1 回答 1

0

Angular 服务遵循单例模式,这意味着类的实例化仅限于单个对象。

另外,由于您使用的是工厂:

angular.module('myapp').factory('archiveService', [<dependencies>, function () {
    function nextPage() {
        //code here
    );

    return {
        nextPage: nextPage
    }

}]);

然后在您的控制器中,您只需:

archiveService.nextPage();

看到变量我相信nextPage可以简单地将页面作为参数接收,因为repos是一个数组,我猜你打算将新获取的数据添加到该数组中?这将是: this.repos.push(res.data;)而不是this.repos = res.data;

重点是,每次您想要请求新数据时,都应该从控制器调用正确的服务/工厂方法。

所以在你的控制器初始化时,你只需要:

(function init() {
    $scope.archivelist = archiveService.nextPage();
})();

尽管就像我说的那样,您可能应该有一个初始值,nextPage(1)然后从那里将您希望正确处理的工厂方法发送到所需的页面。

于 2017-12-27T13:04:17.410 回答