我有工作代码:
<input type="checkbox" ng-model="disabled" >
<input type="text" ng-model="text" ng-disabled="disabled">
当disabled == true
输入被禁用时。我还需要隐藏实际的模型值(设置为空)。取消选中复选框后,应显示实际模型值。怎么做而不改变模型值?
答案 0 :(得分:0)
我会做这样的事情:
<input type="checkbox" ng-model="disabled" ng-change="change()">
<input type="text" ng-model="text" ng-disabled="disabled">
...
$scope.change = function() {
if ($scope.disabled) {
$scope.textBackup = $scope.text;
$scope.text = '';
} else {
$scope.text = $scope.textBackup;
}
};
注意:我在阅读@AddulMateenMohammed评论之前发布了...我的答案是他的建议的实施......
答案 1 :(得分:0)
这不是最佳选择,但如果您只想处理视图:
<input type="checkbox" ng-model="disabled">
<div ng-show="disabled">
<input type="text" ng-init="text2 = ''" ng-model="text2" ng-disabled="true">
</div>
<div ng-hide="disabled">
<input type="text" ng-model="text">
</div>
同样,这不是最佳选择!建议使用MarcosS选项。
答案 2 :(得分:0)
@Makarov Sergey,我认为即使你有一个复杂的视图或数据源,基本的想法是使用一个临时变量,因为你需要有两个交换的值b / w。
angular
.module('demo', [])
.controller('DefaultController', DefaultController);
function DefaultController() {
var originalText = '';
var vm = this;
vm.text = 'Hello, World!';
vm.onValueChanged = onValueChanged;
function onValueChanged(text) {
if (vm.disabled) {
originalText = text;
vm.text = '';
} else {
vm.text = originalText;
}
}
}
&#13;
span {
color: red;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div>
<em>I </em><span>♥ </span><em>AngularJS</em>
</div>
<div ng-app="demo">
<div ng-controller="DefaultController as ctrl">
<input type="checkbox" ng-model="ctrl.disabled" ng-change="ctrl.onValueChanged(ctrl.text)"/>
<input type="text" ng-model="ctrl.text" ng-disabled="ctrl.disabled"/>
</div>
</div>
&#13;
提示:对于未在视图中显示但存在于控制器中的对象不应在范围上分配,因为使用范围会添加一些JavaScript事件来执行数据绑定,这是不必要的开销,例如双向数据绑定的脏检查事件,这就是为什么在我使用var originalText = '';
代替vm.originalText = '';
答案 3 :(得分:0)
找到适合我的解决方案
function directive() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
let oldViewValue = '';
scope.$watch(() => attrs.hideValue, (newV) => {
if (newV == 'true') {
oldViewValue = ngModelCtrl.$viewValue;
ngModelCtrl.$viewValue = '';
} else {
ngModelCtrl.$viewValue = oldViewValue;
}
ngModelCtrl.$render();
});
}
}
}
并使用:
<input type="checkbox" ng-model="disabled" >
<input type="text" ng-model="text" ng-disabled="disabled" hide-value="disabled">