Nea*_*ara 9 html javascript angularjs
我试图input
在用户选择文件后禁用文件标记.
HTML:
<div ng-controller='firstController'>
<div ng-controller='secondController'>
<input type="file" name="file" upload class="theFileInput" ng-disabled="fileInMemory">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS,第一控制器:
$scope.fileInMemory = false; // tracks if user selected a file for upload, but didn't upload it
$rootScope.$on('fileAdded', function () {
$scope.fileInMemory = true;
console.log($scope.fileInMemory);
});
Run Code Online (Sandbox Code Playgroud)
upload
是一个指令.
在页面加载时,ng-disabled
具有false
应该fileInMemory
更改时,input
标记仍未被禁用.console.log
表明价值fileInMemory
正在发生变化.
到目前为止我尝试了什么
<input type="file" name="file" class="theFileInput" ng-disabled="'fileInMemory'">
Run Code Online (Sandbox Code Playgroud)
只是禁用该字段,什么时候fileInMemory
是假的.
<input type="file" name="file" class="theFileInput" ng-disabled="fileInMemory == 'true'">
Run Code Online (Sandbox Code Playgroud)
不行.
<input type="file" name="file" class="theFileInput" ng-disabled="{{fileInMemory}}">
Run Code Online (Sandbox Code Playgroud)
仍然无法正常工作.
禁用input
标记的最佳方法是什么?
发现了这个问题
看起来这里的问题是范围.我有firstController
它的'范围,内部secondController
有'范围,以及input
标签upload
指令,它显然创建了它自己的范围,并没有看到firstController
范围.
secondController
并且upload
是一般控制器,因此不会继承firstController
.
我想我最好的解决方案是添加一些通用处理程序secondController
,基于input
字段上的附加属性将在需要时禁用它.
你将不得不在$apply
这里利用它,因为它在事件中被改变了:
$scope.fileInMemory = false;
$rootScope.$on('fileAdded', function () {
$scope.$apply(function() {
$scope.fileInMemory = true;
console.log($scope.fileInMemory);
});
});
Run Code Online (Sandbox Code Playgroud)
更新:响应隔离范围导致问题,请fileInMemory
转到$rootScope
:
$rootScope.fileInMemory = false;
$rootScope.$on('fileAdded', function () {
$rootScope.$apply(function() {
$rootScope.fileInMemory = true;
console.log($scope.fileInMemory);
});
});
Run Code Online (Sandbox Code Playgroud)