【问题标题】:AngularJs $scope.$apply not working as expectedAngularJs $scope.$apply 没有按预期工作
【发布时间】:2013-07-25 14:37:20
【问题描述】:

我正在使用这个控件:http://blueimp.github.io/jQuery-File-Upload/angularjs.html 以角度进行文件上传,一旦文件上传到我的服务器,我会返回一个 url,并希望在成功回调时将其显示给客户端。正在使用的插件只是一个普通的 jquery 文件上传,但我正在使用一个 angular 指令包装器。

我是这样定义回调的:

$scope.options = {
    url: '/api/Client/',
    type: 'PUT',
    done: function (event, data) {
        var scope = angular.element(this).scope();
        scope.test = "doesn't work";
        scope.$apply(function () {
            scope.test = "this doesn't work either";
        });
    }
};

文件上传正常,并且调用了 done 函数但是我无法更新视图。我最初只是尝试更改范围,然后我意识到我需要 $apply() 函数,但这也不起作用。

我也试过

$scope.options = {
    url: '/api/Client/',
    type: 'PUT',
    done: function (event, data) {
        $scope.test = "doesn't work";
        $scope.$apply(function () {
            $scope.test = "this doesn't work either";
        });
    }
};

这也行不通。我不确定它为什么不更新我的视图,并且由于 done 调用只是一个 ajax 成功事件,我看不出这个特定的插件如何导致 $scope.$apply 出现任何问题。我正在使用 AngularJs 1.1.5,但我也尝试过 1.0.7 并且遇到了同样的问题。

【问题讨论】:

  • 当您调用 apply 时,您是否收到错误提示 apply/digest 已经在进行中?
  • 不,没有错误。它只是没有做任何事情。如果我多次调用它并查看 $scope.test 的值,我会看到之前设置的值。视图只是不使用该值更新
  • 第二个版本看起来应该对我有用,如果 done 函数被调用。
  • 我设法找出了问题所在。当使用他们的示例时,我有一个 ng-controller 的副本(他们的示例嵌套在我的另一个控制器中),即使两者都使用相同的控制器,它似乎只会更新嵌套控制器范围内的任何内容。删除重复的 ng-controller 属性时,一切正常。多哈。无论如何,谢谢!

标签: angularjs angularjs-directive jquery-file-upload


【解决方案1】:

从我的评论中复制以更清楚地说明问题所在:

我设法找出了问题所在。当使用他们的示例时,我有一个 ng-controller 的副本(他们的示例嵌套在我的另一个控制器中),即使两者都使用相同的控制器,它似乎只会更新嵌套控制器范围内的任何内容。删除重复的 ng-controller 属性时,一切正常。

【讨论】:

  • 遇到了完全相同的问题。有趣的是,根元素中的绑定(第一次出现的 ng-controller 标签)没有更新。
  • 你是最棒的!我遇到了同样的问题,删除控制器重复对所有内容进行了排序。
【解决方案2】:

我想我也会加入,因为我已经花了一整天的时间来处理这个问题。

确保在您的 HTML 中,将 ng-controller 应用于 div 包装器,而不是 ul 元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2017-07-14
    • 2016-09-25
    • 2015-09-22
    相关资源
    最近更新 更多