AngularJS 将 class 应用于事件的父元素?
AngularJS apply class to parent element on event?
我有一个表单域:
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="abc.user.name" ng-focus="abc.setFocus('name')" required>
</div>
我需要做的是设置添加一个 class 到父元素,在这里 <div class="form-group">
,当输入有焦点时,当字段失去焦点时删除它。
我知道如何在 jQuery 中执行此操作,但不会在 Angular 中执行此操作。我有很多表单字段需要像这样,所以我试图避免设置变量并使用 ng-class
查找它。我宁愿有一些方法让字段简单地作用于它的父级,我可以在每个表单字段中使用相同的方法。
你可以执行这个
<div class="form-group {{focusIsSet ? 'is-focused': ''}}">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="abc.user.name" ng-focus="focusIsSet = true" ng-blur="focusIsSet = false" required>
</div>
其中 $scope.focusIsSet
一个布尔值 属性。因此,取决于它的状态,您可以使用该表达式 {{focusIsSet ? 'is-focused': ''}}
在 <div class="form-group">
中管理 类
您可以使用 ng-focus
和 ng-blur
指令更改它
更新
我认为您可以用这种方式保持每个输入的状态
<div class="form-group {{checkFocusState('abc.user.name') ? 'is-focused': ''}}">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="abc.user.name" ng-focus="setFocus('abc.user.name')" ng-blur="setBlur('abc.user.name')" required>
</div>
</div>
JS代码
var inputsFocusState = {};
$scope.checkFocusState = function(propertyPathName) {
if(inputsFocusState[propertyPathName] == true) {
return true;
}
return false
}
$scope.setBlur = function(propertyPathName) {
inputsFocusState[propertyPathName] = false;
}
$scope.setFocus = function(propertyPathName) {
inputsFocusState[propertyPathName] = true;
}
否则,您可以为 html 模板中的每个输入创建每个焦点 属性
P.S。 ng-class
也是不错的选择
P.S.S 我有类似的情况,但是表格是完全动态的。
所以我将每个 属性 拆分为 user.name = {value: 'john', buttons: [...], label: 'Name', //and much more}
这样的对象。
最好将 'user.name.path'
更改为 'user-name-path'
。
指令可能是最简单的通用方法,如果您需要做的只是操纵 dom。
<div class="form-group" focus-class="focused">
<label>Name</label>
<input name="name" class="form-control" ng-model="abc.user.name" required>
</div>
JS
angular.module('myApp').directive('focusClass', function(){
return {
link:function(scope, elem, attrs){
elem.find('input').on('focus', function(){
elem.toggleClass(attrs.focusClass);
}).on('blur', function(){
elem.toggleClass(attrs.focusClass);
});
}
}
});
我有一个表单域:
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="abc.user.name" ng-focus="abc.setFocus('name')" required>
</div>
我需要做的是设置添加一个 class 到父元素,在这里 <div class="form-group">
,当输入有焦点时,当字段失去焦点时删除它。
我知道如何在 jQuery 中执行此操作,但不会在 Angular 中执行此操作。我有很多表单字段需要像这样,所以我试图避免设置变量并使用 ng-class
查找它。我宁愿有一些方法让字段简单地作用于它的父级,我可以在每个表单字段中使用相同的方法。
你可以执行这个
<div class="form-group {{focusIsSet ? 'is-focused': ''}}">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="abc.user.name" ng-focus="focusIsSet = true" ng-blur="focusIsSet = false" required>
</div>
其中 $scope.focusIsSet
一个布尔值 属性。因此,取决于它的状态,您可以使用该表达式 {{focusIsSet ? 'is-focused': ''}}
<div class="form-group">
中管理 类
您可以使用 ng-focus
和 ng-blur
指令更改它
更新
我认为您可以用这种方式保持每个输入的状态
<div class="form-group {{checkFocusState('abc.user.name') ? 'is-focused': ''}}">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="abc.user.name" ng-focus="setFocus('abc.user.name')" ng-blur="setBlur('abc.user.name')" required>
</div>
</div>
JS代码
var inputsFocusState = {};
$scope.checkFocusState = function(propertyPathName) {
if(inputsFocusState[propertyPathName] == true) {
return true;
}
return false
}
$scope.setBlur = function(propertyPathName) {
inputsFocusState[propertyPathName] = false;
}
$scope.setFocus = function(propertyPathName) {
inputsFocusState[propertyPathName] = true;
}
否则,您可以为 html 模板中的每个输入创建每个焦点 属性
P.S。 ng-class
也是不错的选择
P.S.S 我有类似的情况,但是表格是完全动态的。
所以我将每个 属性 拆分为 user.name = {value: 'john', buttons: [...], label: 'Name', //and much more}
这样的对象。
最好将 'user.name.path'
更改为 'user-name-path'
。
指令可能是最简单的通用方法,如果您需要做的只是操纵 dom。
<div class="form-group" focus-class="focused">
<label>Name</label>
<input name="name" class="form-control" ng-model="abc.user.name" required>
</div>
JS
angular.module('myApp').directive('focusClass', function(){
return {
link:function(scope, elem, attrs){
elem.find('input').on('focus', function(){
elem.toggleClass(attrs.focusClass);
}).on('blur', function(){
elem.toggleClass(attrs.focusClass);
});
}
}
});