为什么我的AngularJS绑定不总是正确更新?

为什么我的AngularJS绑定不总是正确更新?,angularjs,angular-file-upload,Angularjs,Angular File Upload,我正在创建一个简单的图像上传页面,可以使用AWS S3。它具有一个简单的按钮,上传一个新的图像和图像列表。像这样: <ul> <li ng-repeat="image in product.images"> <a class="thumbnail" href="{{ image }}" target="_blank"> <img ng-src="{{ image }}" alt="image">

我正在创建一个简单的图像上传页面,可以使用AWS S3。它具有一个简单的按钮,上传一个新的图像和图像列表。像这样:

<ul>
    <li ng-repeat="image in product.images">
        <a class="thumbnail" href="{{ image }}" target="_blank">
          <img ng-src="{{ image }}" alt="image">
        </a>
    </li>
    <li>
        <div class="btn-image-upload" 
            ngf-select 
            ngf-change="upload($files)"
            ngf-accept="'image/*'"></div>
    </li>
</ul>
在我的控制器上:

$scope.upload = function (files) {

    var aws_policy, aws_policy_signature;

    if (files && files.length) {
        $http
            .get(API_URL+'/helper/aws_policy')
            .then(function(data) {
                aws_policy = data.data.policy;
                aws_policy_signature = data.data.signature;
                for (var i = 0; i < files.length; i++) {
                    var file = files[i];
                    var key = generate_aws_key() + '.' + file.name.split('.').pop();
                    var base_url = 'https://.../';

                    Upload
                    .upload({ ... })
                    .success(function( data, status, headers, config ) {

                        console.log($scope.product);
                        $scope.product.images.push( base_url + key );
                        console.log($scope.product);

                    });
                }
            });
    }
};
$scope.upload=函数(文件){
var aws_保单、aws_保单签名;
if(files&&files.length){
$http
.get(API_URL+/helper/aws_策略)
.then(功能(数据){
aws_策略=data.data.policy;
aws_政策_签名=data.data.signature;
对于(var i=0;i
文件被正确上传(我从AWS获得了一个不错的
204成功
),两个
console.log($scope.product)
的get调用显示了适当的结果(第二个是
图像
数组中的项目)

事情是这样的。这个宝贝在我的开发机器上工作得很好,但有时在暂存或生产服务器上,当
$scope.product.images
被删除时,映像列表不会被更新。有时,我的意思是,它做了三分之一的时间

总结

有时,只有在我的生产服务器上,当AngularJS摘要中更新了
$scope.product.images
时,DOM才会更新


我的编程经验告诉我,在这类事情中,有时这是一个不可接受的概念,它必须与出现此问题时总是发生的事情有关,但我进行了大量调试,未能找到真正的原因。想法?

很可能是由以下原因造成的:

您必须冻结
i
的值:

$scope.upload = function (files) {

    var aws_policy, aws_policy_signature;

    function upload(index) {
        var file = files[index];
        var key = generate_aws_key() + '.' + file.name.split('.').pop();
        var base_url = 'https://.../';

        Upload
        .upload({ ... })
        .success(function( data, status, headers, config ) {

            console.log($scope.product);
            $scope.product.images.push( base_url + key );
            console.log($scope.product);

        });
    }

    if (files && files.length) {
        $http
            .get(API_URL+'/helper/aws_policy')
            .then(function(data) {
                aws_policy = data.data.policy;
                aws_policy_signature = data.data.signature;
                for (var i = 0; i < files.length; i++) {
                    var file = files[i];
                    upload(i);
                }
            });
    }
};
$scope.upload=函数(文件){
var aws_保单、aws_保单签名;
功能上传(索引){
var file=文件[索引];
var key=generate_aws_key()+'.+file.name.split('.').pop();
var base_url='1〕https://.../';
上传
.upload({…})
.success(函数(数据、状态、标题、配置){
log($scope.product);
$scope.product.images.push(基本url+key);
log($scope.product);
});
}
if(files&&files.length){
$http
.get(API_URL+/helper/aws_策略)
.then(功能(数据){
aws_策略=data.data.policy;
aws_政策_签名=data.data.signature;
对于(var i=0;i
您是否尝试过将成功代码包装在$timeout()中?哇,这对我来说是新的。理论上和我写的代码是一样的!