Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 如何解决TypeError:angular.element(…).scope(…)。selectFileForUpload不是函数_Javascript_Angularjs_Asp.net Mvc_Angularjs Scope - Fatal编程技术网

Javascript 如何解决TypeError:angular.element(…).scope(…)。selectFileForUpload不是函数

Javascript 如何解决TypeError:angular.element(…).scope(…)。selectFileForUpload不是函数,javascript,angularjs,asp.net-mvc,angularjs-scope,Javascript,Angularjs,Asp.net Mvc,Angularjs Scope,我正在尝试使用angularjs在asp.net mvc中上载一个文件。我有以下作为我的文件上传界面 <form name="f1" class="form-horizontal" ng-submit="SaveFile()" novalidate> <div style="color: red">{{Message}}</div> <div class="col-md-12"> <label>Selec

我正在尝试使用angularjs在asp.net mvc中上载一个文件。我有以下作为我的文件上传界面

<form name="f1" class="form-horizontal" ng-submit="SaveFile()" novalidate>
    <div style="color: red">{{Message}}</div>
    <div class="col-md-12">
        <label>Select File:</label>
        <input type="file" name="file" accept="image/*"
               onchange="angular.element(this).scope().selectFileForUpload(this.files)"
               class="form-control input-bordered" required>                      
        <span class="text-danger" ng-show="(f1.file.$dirty || IsFormSubmitted) && f1.file.$error.required">Image required!</span>
        <span class="text-danger">{{ FileInvalidMessage }}</span>
    </div>
    <div class="col-md-12">
        <label>Description:</label>
        <input type="text" name="uFileDescription" class="form-control input-bordered {{(IsFormSubmitted?'ng-dirty' + (f1.uFileDescription.$invalid?' ng-invalid' : ''):'')}}" autofocus data-ng-model="FileDescription" />
    </div>
    <div class="col-md-12">
        <button type="submit" class="btn btn--primary">Upload File</button>
        <a href="#/FileUpload" class="btn btn--secondary">Cancel</a>
    </div>
</form>
我应该采取哪些不同的措施来避免此错误

̶$̶s̶c̶o̶p̶e̶.̶s̶e̶l̶e̶c̶t̶F̶i̶l̶e̶F̶o̶r̶U̶p̶o̶a̶d̶(̶)̶{̶
$scope.selectFileForUpload = function(files) {
   $scope.SelectFileForUpload = files[0];
}
坦率地说,函数名和变量名的大写字母不同是糟糕的编程实践。这使得代码容易出错,并且难以阅读


与使用
angular.element(this.scope()
)不同,我建议使用一个自定义指令来处理:

app.directive(“selectNgFiles”,function()){
返回{
要求:“ngModel”,
链接:功能后链接(范围、元素、属性、ngModel){
要素开启(“变更”,功能(e){
var files=elem[0]。文件;
ngModel.$setViewValue(文件);
})
}
}
});
用法:

需要启用的
.scope()
方法。AngularJS的小型版本并非如此

此外,使用
onchange
属性调用的事件处理程序未与AngularJS执行上下文及其摘要循环集成。只有在AngularJS执行上下文中应用的操作才会受益于AngularJS数据绑定、异常处理、属性监视等


有关更多信息,请参见

错误中提到,
selectedFileForUpload
不是一个函数。您正在范围中定义一个名为
selectFileForUpoad
的函数。你只是在方法的名称上有一个拼写错误吗?@Jacob没有,我没有在方法的名称上有一个拼写错误。我遵循了关于这一点的教程,这就是代码是如何编写的。我正在为项目使用angularjs 1.6.6版。标题中的错误是
selectedFileForUpload
。在HTML中,它是
选择fileforupload
。在您的范围内,它是
选择fileforupoad
。这些都不匹配。不管你的教程是否有拼写错误。这不会使打字错误变得更正确。如果您发布的代码不是实际代码,并且您没有打字错误,那么您应该编辑问题。您不应该在生产代码中使用
angular.element().scope()
。您应该使用或其他方法在组件/指令之间传递消息。@Guzzyman:拼写不同。你打错了。一个是
selectFileForUpload
,另一个是
selectFileForUpload
。你需要解决这个问题
selectFileForUpload
不是一个函数,因为您实际上没有使用该名称定义函数。在此处键入时,这肯定是我的输入错误。在实际代码本身中,它读取:$scope.selectFileForUpload=function(files){$scope.selectFileForUpload=files[0];},而不是此处所表示的内容。即使在确保代码中没有输入错误后,错误仍然保持不变。
      $scope.selectFileForUpload = function (files) {
            $scope.SelectedFileForUpload = file[0];
      }
̶$̶s̶c̶o̶p̶e̶.̶s̶e̶l̶e̶c̶t̶F̶i̶l̶e̶F̶o̶r̶U̶p̶o̶a̶d̶(̶)̶{̶
$scope.selectFileForUpload = function(files) {
   $scope.SelectFileForUpload = files[0];
}
<input type="file" name="file" accept="image/*"
       ̶o̶n̶c̶h̶a̶n̶g̶e̶=̶"̶a̶n̶g̶u̶l̶a̶r̶.̶e̶l̶e̶m̶e̶n̶t̶(̶t̶h̶i̶s̶)̶.̶s̶c̶o̶p̶e̶(̶)̶.̶s̶e̶l̶e̶c̶t̶F̶i̶l̶e̶F̶o̶r̶U̶p̶l̶o̶a̶d̶(̶t̶h̶i̶s̶.̶f̶i̶l̶e̶s̶)̶"̶
       select-ng-files ng-model="files"
       ng-change="selectFileForUpload(files)"
       class="form-control input-bordered" required>