当在函数内部调用时,Angular资源(ngResource)不会进行AJAX调用

时间:2013-07-26 00:24:48

标签: angularjs ngresource

我正在尝试使用ngResource进行AJAX调用,在下面的代码中,'a'和'b'都会打印,但来自Table.import()的AJAX调用无法进行。如果我将AJAX调用移到onFileRead之外,那么它可以工作。可能是什么问题?

var TableImportController = ['$scope','Table', 'project', 'table',
    function($scope, Table, project, table) {

    $scope.table = table;
    $scope.project = project;

    $scope.onFileRead = function(file) {

        console.log('a');
        Table.import({ data : file.data}, function() {

        }, function() {

        });
        console.log('b');
    };

}];

表格为ngResource

.factory('Table', function($resource) {
        var Table = $resource('/api/tables/:id:listAction/:itemAction',
            {
                id: '@id',
                listAction: '@listAction',
                itemAction: '@itemAction'
            },
            {
                update: { method: 'PUT' },
                import : { method: 'POST', params: { listAction: 'import' }},

            }
        );

        return Table;
});

2 个答案:

答案 0 :(得分:0)

您将$ scope.onFileRead声明为函数。 什么是onFileRead? 将调用移到函数外部时,它将作为初始化的一部分运行。 什么提供输入文件? 可能从DOM中的某些东西绑定到onFileRead函数。

答案 1 :(得分:0)

我明白了。看起来我遇到了这个错误:https://github.com/angular/angular.js/issues/2794#issuecomment-18807158

我通过在scope.$apply(function() { });

中包装AJAX调用(并最终将其移动到触发onFileRead回调的位置)解决了这个问题