Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使使用$apply,Angular也不会更新视图_Javascript_Angularjs_Ng File Upload - Fatal编程技术网

Javascript 即使使用$apply,Angular也不会更新视图

Javascript 即使使用$apply,Angular也不会更新视图,javascript,angularjs,ng-file-upload,Javascript,Angularjs,Ng File Upload,我包括一个html文件使用在我的主页内使用 <div ng-controller="detailViewCtrl" ng-include="'partials/template.html'"></div> 在这个模块中还有一个uploadDocument()函数,它在上载文档后调用getRelatedDocuments()。此函数用于处理到服务器的实际数据传输 $scope.uploadFile = function(file) { file.upload =

我包括一个html文件使用在我的主页内使用

<div ng-controller="detailViewCtrl"  ng-include="'partials/template.html'"></div>
在这个模块中还有一个
uploadDocument()
函数,它在上载文档后调用
getRelatedDocuments()
。此函数用于处理到服务器的实际数据传输

$scope.uploadFile = function(file) {
    file.upload = Upload.upload({
      url: tempPath,
      method: 'POST',
      file: file,
      sendFieldsAs: 'form',
      fields: {
        docid: $scope.id
      }
    });

    file.upload.then(function(response) {
      $timeout(function() {
        file.result = response.data;
      });
    }, function(response) {
      $scope.getRelatedDocuments(); // Here I try to update the list
      if (response.status > 0)
        $scope.errorMsg = response.status + ': ' + response.data;
    }, function(evt) {
      file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
    });
  }
在主页中的某个位置按下相应按钮后,将调用此上载功能。因为我可以看到日志消息和响应,所以我假设一切正常

可以找到包含代码相关部分的plunk。它不工作的诅咒,因为它需要后端保存和获取文档列表,但它仍然是一个很好的参考


有人知道为什么会这样吗

在包含这两个模板时,我似乎不应该使用ng controller指令,因为它们是从同样使用相同控制器的页面调用的。如果将同一个控制器嵌套在自身上,则Angular可能会以意外的方式运行。

能否发布一些
detailViewCtrl
的代码?另外,可能您尝试使用
$watch
函数来检测更改,然后使用
$apply()
函数。您可以提供示例plunkr吗?我知道在这些问题中提供一个示例确实很有用,但在这种情况下,我不确定是否可以,因为我已经添加了很多东西,还有一些东西像对我的服务器的调用,我不能在一个简单的plunk中复制。我希望这是我在包含模板或异步调用的方式上犯的一些错误,因为在过去,我从来没有在模型更改时更新页面的问题。但是,与此问题相关的所有代码都包含在内。另外请注意,log语句会及时正确打印新列表,因此变量没有所需的数据是没有问题的。您应该提供一个模拟,而不是$http.post。然后,直接使用:$q.when(mockedValue)
.controller('detailViewCtrl', function($scope, $i18next, $routeParams,...    

$scope.relatedDocuments = [];

$scope.getRelatedDocuments = function(document) {
  myAPI.getRelatedDocuments($scope.id).then(function(response) {
    $scope.relatedDocuments = response.data.result;    
    console.log("getRelatedDocuments", $scope.relatedDocuments);
  });
};

$scope.getRelatedDocuments();
$scope.uploadFile = function(file) {
    file.upload = Upload.upload({
      url: tempPath,
      method: 'POST',
      file: file,
      sendFieldsAs: 'form',
      fields: {
        docid: $scope.id
      }
    });

    file.upload.then(function(response) {
      $timeout(function() {
        file.result = response.data;
      });
    }, function(response) {
      $scope.getRelatedDocuments(); // Here I try to update the list
      if (response.status > 0)
        $scope.errorMsg = response.status + ': ' + response.data;
    }, function(evt) {
      file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
    });
  }