AngularJs$范围。$应用未按预期工作

AngularJs$范围。$应用未按预期工作,angularjs,angularjs-directive,jquery-file-upload,Angularjs,Angularjs Directive,Jquery File Upload,我使用这个控件:在angular中进行文件上传,一旦文件上传到我的服务器,我将返回一个url,并希望在成功回调时将其显示给客户端。所使用的插件只是一个普通的jquery文件上传,但是我正在使用一个angular指令包装器 下面是我如何定义回调的: $scope.options = { url: '/api/Client/', type: 'PUT', done: function (event, data) { var scope = angular.el

我使用这个控件:在angular中进行文件上传,一旦文件上传到我的服务器,我将返回一个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,并且遇到了相同的问题。

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


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

我想我也会插话,因为我花了一整天处理这个问题


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

当您调用apply时,您是否收到一个错误,即apply/digest已经在进行中?不,没有错误。这根本没用。如果我多次调用它并查看$scope.test的值,我会看到之前设置的值。视图只是没有用那个值更新。如果调用了done函数,第二个版本对我来说应该可以工作。我设法解决了这个问题。当使用他们的示例时,我有一个ng控制器的副本(他们的示例嵌套在我的另一个控制器中),即使两者使用相同的控制器,它似乎只会更新嵌套控制器范围内的任何内容。删除重复的ng控制器属性时,一切正常。Doh。无论如何谢谢你!有完全相同的问题。有趣的是,根元素中的绑定(第一次出现ng控制器标记)没有更新。你是最好的!我也遇到了同样的问题,删除控制器复制可以解决所有问题。