Javascript 如何让AngularJS更新ng repeat数组拼接上的DOM$scope.$apply()返回一个错误

Javascript 如何让AngularJS更新ng repeat数组拼接上的DOM$scope.$apply()返回一个错误,javascript,angularjs,dom,angularjs-ng-repeat,Javascript,Angularjs,Dom,Angularjs Ng Repeat,已解决-我有这一点,它表明了我所面临的问题。这是一个简单的图像上传程序,它还使用FileReader显示图像(感谢)。我把它放在一个动态的形式,可以添加和删除 问题: 在这种情况下,dataUrl在Add之后才会显示 单击另一个图像。这可能是唯一的问题,因为 图像在我的网站上显示得很好--解决 如果将图像上载到第一个表单上,然后单击添加另一个图像,然后单击第一个选项卡,然后删除第一个选项卡,则会在$scope.images中删除数据,但不会更新DOM。添加$scope.$apply()会导致摘要

已解决-我有这一点,它表明了我所面临的问题。这是一个简单的图像上传程序,它还使用
FileReader
显示图像(感谢)。我把它放在一个动态的形式,可以添加和删除

问题:

  • 在这种情况下,
    dataUrl
    Add之后才会显示
    单击另一个图像
    。这可能是唯一的问题,因为 图像在我的网站上显示得很好--解决

  • 如果将图像上载到第一个表单上,然后单击
    添加另一个图像
    ,然后单击第一个选项卡,然后删除第一个选项卡,则会在
    $scope.images
    中删除数据,但不会更新DOM。添加
    $scope.$apply()
    会导致摘要已在进行中的错误

  • 旧文件名显示在上载输入中,但输入实际上为空

  • 我的问题是:删除图像时如何更新DOM

    更新:问题1已解决,但问题2和问题3仍然存在


    Update2:我已尝试为
    附加一个
    $scope.$apply
    ,因为您的指令在AngularJs中处理摘要周期之外的事件,所以您需要在
    scope.$apply()
    中包装对作用域的任何更新。因此,在你的指令中:

     reader.onload = function() {
       var dataURL = reader.result;
       scope.$apply(function() {
         scope.$parent.upload(file, dataURL, attributes.angularFileUploads);
       });
     };
    

    似乎image.dataUrl被缓存了或其他什么东西

    添加

    ng if=“image.dataUrl”

    标记

    似乎可以补救这种情况,但并不能解决根本问题。。不管它是什么。

    您对ngRepeat中的表达式跟踪有问题
    正如医生所说的

    ngRepeat对DOM进行相应的更改:

    • 添加项时,模板的新实例将添加到DOM中
    • 删除项时,其模板实例将从DOM中删除
    • 当项目被重新排序时,它们各自的模板在DOM中被重新排序
    所以,在您拼接第一个元素的情况下,最后一个元素的索引将更改为第一个,您只需要从DOM中删除最后一个元素,而不需要先更改


    另外,$index、$last和etc是ngRepeat作用域中的一个特殊属性,因此它始终可用,并且不依赖于track by expresion而不是
    $scope.$apply
    ,尝试注入
    $timeout
    并执行
    $timeout(函数(){/*stuff with$scope*/})@StickyCube,我以前试过,但没有改变任何东西。我为
    $timeout(function(){$scope.images.splice($scope.images.indexOf($scope.image),1);},100)添加了
    $timeout
    为什么在ng repeat中使用
    track by$index
    ?我使用
    track by$index
    以便
    angular file uploads=“{{$index}}”
    知道上载了哪个图像编号。我试着按$index删除
    曲目
    ,结果似乎。。。。。。。工作此外,似乎$index无论如何都能起作用。我想这就解决了@格伦迪,我希望你能添加你的解释作为答案。
    $index
    是ngRepeat中的一个特殊变量,它始终可用,nod取决于你如何跟踪问题,正如格伦迪所暗示的,
    跟踪$index
    。移除使其按预期工作的。