0

我遇到问题,尽管列表正在更新,但ngRepeat不显示信息。ngRepeat没有更新,即使列表是

在下面的代码中,$scope.selectedImages阵列被添加到使用文件输入选择图像时。它被设置为只有唯一的文件将被添加到selectedImages列表中(无重复)。

在函数结尾处,scope.selectedImages将使用新值打印数组,但在视图中,ngRepeat不会添加具有图像名称的新列表项。

关于这个问题的其他问题说,$scope.$apply应该解决这个问题,但对我来说不是这样。我是否错误地使用了它,或者有什么是我误解的。

编辑:查看1查看2在单独的HTML页面,它们都依赖同一个控制器上。

视图1:

<input type="file" multiple accept="image/*" class="file-input" id="img-upload-btn" onchange="angular.element(this).scope().select(this)"> 
<md-button class="md-primary md-raised sidenav-btn" ng-click="proxy('img-upload-btn')"> 
    Select <strong>Images</strong> 
</md-button> 

代理功能允许md-button点击输入。

查看2:

<div layout-padding flex ng-controller="upload-controller"> 
    <ul> 
    <li ng-repeat="im in selectedImages">{{im.name}}</li> 
    </ul> 
</div> 

控制器:

$scope.selectedImages = []; 
$scope.select = function(element) { 
    $scope.$apply(function(scope) { 
    var justFiles = $.map(element.files, function(val, key) { 
     return val; 
    }, true); 

    var fileEquality = function(f1, f2) { 
     if (f1.name != f2.name) return false; 
     if (f1.size != f2.size) return false; 
     if (f1.type != f2.type) return false; 
     if (f1.lastModified != f2.lastModified) return false; 
     return true; 
    } 

    // inefficient, find better way later 
    for (i in justFiles) { 
     var contains = false; 
     var file = justFiles[i]; 
     for (i in scope.selectedImages) { 
     if (fileEquality(file, scope.selectedImages[i])) { 
      contains = true; 
      break; 
     } 
     } 
     if (!contains) scope.selectedImages.push(file); 
    } 
    console.log(scope.selectedImages); 
    }); 
}; 
+0

您的控制器中没有$ scope.uploadedImages!这个模型是空的! –

+0

@HanArantes糟糕!我已经复制了该代码的旧版本。即使使用selectedImages,也会出现问题,并且不显示任何内容。我编辑了新的代码。 –

回答

0

你输入字段模板和控制器模板具有不同的范围。在你的情况下使用$rootScope.selectedImages

+0

我试过它没有幸运不幸。 –

+0

是放置在控制器模板中的'file'输入字段吗? –

+0

这可能是实际的问题。我有两个html文件取决于控制器,一个是上传的边栏,其中包含输入,另一个是应该显示文件的视图。有什么办法可以将这些分开吗? –

相关问题