【问题标题】:Angular resource (ngResource) won't make the AJAX call when called inside a functionAngular 资源 (ngResource) 在函数内部调用时不会进行 AJAX 调用
【发布时间】:2013-07-26 02:38:29
【问题描述】:

我正在尝试使用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');
    };

}];

其中 Table 是 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;
});

【问题讨论】:

  • 能否把Table.import的代码包含进来?
  • @YeLiu 添加了 Table.import()

标签: angularjs ngresource


【解决方案1】:

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

我通过在 scope.$apply(function() { }); 中包装 AJAX 调用(并最终将其移动到触发 onFileRead 回调的位置)解决了这个问题

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • onFileRead 是一个自定义指令中的回调(隔离范围,参数是 '&')。 $scope.onFileRead() 被正确调用。
    猜你喜欢
    • 2020-11-25
    • 2014-07-24
    • 1970-01-01
    • 2018-10-18
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多