如何在Datatable-AngularJS的单元格中查看$watch type=“files”

如何在Datatable-AngularJS的单元格中查看$watch type=“files”,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我试图在Datatable的单元格内创建一个上载按钮,我有一个click事件的clickHandler。“上载”按钮称为“窗口资源管理器”,我可以选择要上载的文件。为了将文件上载到服务器,我使用$watch检查模型文件的更改,如果有任何更改,它将触发上载功能。此功能将文件上载到服务器。但是$watch似乎从未看到数据表中发生了什么。这是我的密码: 我正在使用angular文件上传,它似乎在网站的其他部分工作,我没有使用datatable中的上传按钮 当我运行代码时,它会弹出alerttest和窗

我试图在Datatable的单元格内创建一个上载按钮,我有一个click事件的clickHandler。“上载”按钮称为“窗口资源管理器”,我可以选择要上载的文件。为了将文件上载到服务器,我使用$watch检查模型文件的更改,如果有任何更改,它将触发上载功能。此功能将文件上载到服务器。但是$watch似乎从未看到数据表中发生了什么。这是我的密码:

我正在使用angular文件上传,它似乎在网站的其他部分工作,我没有使用datatable中的上传按钮

当我运行代码时,它会弹出alerttest和窗口来选择文件,但它从不调用服务器。在浏览器上看不到网络呼叫

有人能告诉我我的密码有什么问题吗? 多谢各位

视图:

 <td><a class="btn btn-primary" ng-file-select ng-model="files" ng-multiple="true">Upload documents</a> </td>
$watch控制器:

$scope.clickHandler = function (data) {
    //alert('upload document');        
    var appList = JSON.parse($window.sessionStorage.getItem(Constant.ApplicationKey));
    var id = data[0];

    angular.forEach(appList, function (v) {
        if (v.PersonID == id) {
            $scope.selectedUserName = v.FirstName + " " + v.LastName;
            return;
        }
    })
    $scope.$watch('files', function () {
        $scope.upload($scope.files);
        alert("test");
    })

}
$scope.onClick = function (files) {
  console.log('Handler clicked with files:', files);
  if (files) {
    console.log('Uploading files');
    $scope.upload(files);
  }
};
上传功能

$scope.upload = function (files) {
    if (files && files.length) {
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            $upload.upload({
                url: Constant.BaseUrl + 'api/User/UploadFile',
                params: { username: $scope.selectedUserName, Role: 'Student' },
                file: file
            }).progress(function (evt) {
                var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                console.log('progress: ' + progressPercentage + '% ' +
                            evt.config.file.name);
            }).success(function (data, status, headers, config) {
                console.log('file ' + config.file.name + 'uploaded. Response: ' +
                            JSON.stringify(data));
            });
        }
    }
};

您不应该每次单击按钮时都创建一个新的观察者$范围。$watch。。。每次都会注册一个新的观察者,你可能会遇到问题

你不能在用户点击后上传文件吗?此外,请尝试不使用jQuery事件侦听器,而是使用角度ng单击,以避免模型/视图不一致:

HTML:


实际上,您希望在单击“确切位置”时运行上载?我想您需要等待,直到用户选择了文件模式并选择了他想要上传的文件。

ng file select允许用户选择他们想要上传的文件。我认为在这种情况下我不需要模态。@user1874435不,模态是指操作系统中的常规弹出窗口,您可以从中选择文件。我猜您只想在用户在此弹出窗口中选择文件后上传这些文件。当前的ng文件选择将弹出一个窗口供用户选择文件。因此,它是由指令完成的。现在,我需要检查该指令的任何更改,并进行上传。这有意义吗?我知道所有这些,实际上从今天开始我也使用这个指令。我只是想知道你的clickHandler挂在哪里:如果点击事件发生在用户选择文件之后,你不需要观看任何东西,只需上传你的ng模型上的内容
<td ng-click="onClick(files)"> ... </td>
$scope.onClick = function (files) {
  console.log('Handler clicked with files:', files);
  if (files) {
    console.log('Uploading files');
    $scope.upload(files);
  }
};