angularjs - 当作用域对象在 Controller 作用域内部更改值时更新 UI

标签 angularjs angularjs-scope

我正在编写一个简单的小文件 uploader ,我将输入文件放入 $scope.files 并通过 ajax 调用上传,然后成功后我将移动 $scope.files $scope.successfulUploads 对象。我想在设置了值后立即显示 successfulUploads 列表,它与 $scope.files 对象配合使用,并且控制台显示 $scope.successfulUploads 应该是这样。如果你愿意的话,我只需要写一个可观察的。

这是我的代码:

Controller

$scope.files = [];
$scope.successfulUploads = [];

$rootScope.$on('upload:success', function() {
    //console.log('Controller: on `success`');
    for (var i = 0; i < $scope.files.length; i++) {
        $scope.successfulUploads.push($scope.files[i]);
    }
    $scope.files = [];
    console.log('successfulUploads: ' + $scope.successfulUploads);
});

HTML:

<span class="span2 btn btn-success fileinput-button">
    <span>Add Files</span>
    <input type="file" multiple ng-model="files" file-change>
</span>
<table class="table table-hover table-striped">
    <tbody>
        <tr ng-repeat="file in successfulUploads">
            <td>{{file.name}}</td>
            <!--<td><a href="#" class="btn btn-danger">Delete</a></td>-->
        </tr>
    </tbody>
</table>
<div class="muted text-left">Uploaded: {{ successfulUploads.length }}</div>
</div>
<小时/>

正如我所说,当我使用 ng-repeat="file in files" 时,它工作得非常漂亮。

在有人建议使用 blueimps 之前文件 uploader ,是的,它是一个外观漂亮、功能强大的文件 uploader ,但我需要它与我已经定义的 Angular 模块一起使用,当我尝试将其转换为它时,它停止工作。今天,我下载了完整的源代码并在我的本地主机上“按原样”运行它,它给了我同样的错误,而且我已经到了最后期限。也许稍后我可以重新访问它。

最佳答案

就在第二个之后:

$scope.files = [];

添加:

$scope.$apply()

然后它应该可以工作。

关于angularjs - 当作用域对象在 Controller 作用域内部更改值时更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17182705/

相关文章:

javascript - Angular chart.js onClick 不起作用-单击时如何获取条形图的所有元素

javascript - Angular 工厂服务问题

angularjs - 如何在angularjs中调用 Controller 中的函数?

javascript - 使用 $http Angular 时如何返回 HTML 以显示为 HTML 而不是文本

javascript - AngularJS - 模块 - Controller 访问问题

javascript - 无论如何,UI 路由器都不能与 Angular 一起工作

javascript - 自定义过滤器覆盖原始数据或导致无限 $digest 循环

javascript - 如何确保指令的链接函数在 Controller 之前运行?

javascript - 使用 angular.copy 扩展服务

javascript - 浏览器重新加载时 Angular 运行 Controller 两次