Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 角度范围界定问题_Javascript_Angularjs - Fatal编程技术网

Javascript 角度范围界定问题

Javascript 角度范围界定问题,javascript,angularjs,Javascript,Angularjs,我有一个问题,通过我的ng控制器中的一个表单似乎没有改变控制器中我认为会发生的属性。经过一段时间的阅读,我似乎没有完全意识到原型继承,但多亏了,我更新了我的代码。但不幸的是,它仍然不起作用,我不知道为什么 这是我的HTML <div ng-app="licenceApp" ng-controller="licenceController"> <div class="hover panel" ng-class="{switch : licenceFormVisib

我有一个问题,通过我的
ng控制器中的一个表单
似乎没有改变控制器中我认为会发生的属性。经过一段时间的阅读,我似乎没有完全意识到原型继承,但多亏了,我更新了我的代码。但不幸的是,它仍然不起作用,我不知道为什么

这是我的HTML

<div ng-app="licenceApp" ng-controller="licenceController">    
    <div class="hover panel" ng-class="{switch : licenceFormVisible}">
        <div class="highlightedSection nosidepad clearfix back">  
            <div class="highlightedSubSection" ng-class="{fullsize : uploadModel.active}" ng-show="!Applying && !FinishedWithErrors && !offlineActivationScreenVisible">
                <h2>Licence File</h2>
                Upload and apply a valid licence file{{uploadModel.active}}<br /><br />
                ...
                <form id="hiddenUploadForm" name="hiddenUploadForm" target="hiddenUploadFormFileTarget" action="/settings/uploadILP" method="post" enctype="multipart/form-data" style="display: none;">
                    <input id="hiddenUploadFormFile" name="file" type="file" ng-model="uploadModel.uploadFileName" onchange="angular.element(this).scope().uploadFileChanged()" />
                    <iframe id="hiddenUploadFormFileTarget" name="hiddenUploadFormFileTarget" iframe-onload="uploadFileFinished()"></iframe>
                </form>
            </div>
        </div>
    </div>

因此,当我在函数中更改
uploadModel.active
时,它会通过
console.log
显示正确的值,但显示不会模拟新值!我在这里还受原型遗传的影响吗?请注意,当输入文件控件更改时,
uploadFileChanged
会被点击。

onchange是angular之外的javascript事件,因此您需要调用
$apply
来通知angular范围内的更改。幸运的是,有一个angular指令可以为您做到这一点()


如果您计划使用输入类型文件,则可能需要创建一个简单的指令来处理更改事件,而无需以这种方式访问元素范围。

是的,我只是仔细检查了一下,它对输入不起作用。。在这种情况下,我只需要在我的函数中使用$apply吗?ngChange只需要ngModel就可以工作,所以如果输入字段有ngModel,它应该可以工作。谢谢。如果我添加代码,我会在应用行中得到一个错误,即:
uncaughttypeerror:undefined不是一个函数
,它是
$apply
:D-好的,这很好,很有效,谢谢。但我能问一下为什么吗?为什么在其他功能中我不需要申请?它必须在执行函数时找到作用域?由于双向数据绑定的工作方式,当您更改模板中使用的$scope中的属性时,需要在该属性以某种方式更改时通知它,它使用的方式称为$digest,这是一个递归函数,它在所有范围内运行,检查它应该与模板保持同步的字段中的相等性检查。
angular.module('licenceApp.controllers', [])
    .controller('licenceController', ['$scope', 'licenceAPIservice', '$filter', '$timeout', function ($scope, licenceAPIservice, $filter, $timeout) {
        $scope.uploadModel = {
            active: false,
            uploadFileName: "",
            uploading: false
        };

        $scope.uploadFileChanged = function () {
            $scope.uploadModel.active = true;
            $scope.uploadModel.uploading = true;

            $('#hiddenUploadForm').submit();
        }
        ...
<input id="hiddenUploadFormFile" 
       name="file" type="file" 
       ng-model="uploadModel.uploadFileName"
       ng-change="uploadFileChanged()" />
<input id="hiddenUploadFormFile" 
       name="file" type="file" 
       onchange="angular.element(this).scope().uploadFileChanged()"/>
    $scope.uploadFileChanged = function () {
        $scope.$apply(function() {
          $scope.uploadModel.active = true;
          $scope.uploadModel.uploading = true;
          $('#hiddenUploadForm').submit();
        });
    }