Angular 指令默认选中
Angular directive default to checked
我有一个为 "switch" 创建的指令(元素),它使用 input[checkbox]。
只要不选中复选框的初始状态,一切正常。但是如果我想将初始状态设置为选中(基于我的控制器值),那么它总是相反的。为什么当控制器变量说它应该是值时却没有检查值?
Html
<a-switch toggle-state="vm.doSomething"></a-switch>
指令Html
<div class="switch-container">
<input type="checkbox" id="switch" />
<label for="switch" class="pm-switch"></label>
</div>
Javascript 控制器
vm.doSomething = {
state: true
};
指令
angular.module('material')
.directive('aSwitch', [
'$timeout', function($timeout) {
return {
templateUrl: 'elements/material/switch/switch.html',
transclude: false,
restrict: 'E',
scope: {
toggleState: '=',
},
link: function (scope, element) {
element.on('click touchstart', function (event) {
if (event.srcElement && event.srcElement.id && event.srcElement.id === "switch") {
event.stopPropagation();
$timeout(function() {
scope.toggleState.state = !scope.toggleState.state;
});
}
});
}
};
}
]);
我意识到为了设置泛型的选中状态
<input type="checkbox" />
我只需要添加属性"checked",喜欢
<input type="checkbox" checked />
但是如果它在我的指令 html 中,我该怎么做呢?
由于您使用的是包含 scope: { toggleState: '='}
的隔离作用域,因此您应该直接将 toggleState.state
绑定到模板中的输入框,这样 link 函数代码将使用 toggle-state
属性
以两种方式将 toggleState
与您的控制器范围变量绑定,从而将其删除
Directive.html
<div class="switch-container">
<input type="checkbox" id="switch" ng-model="toggleState.state"/>
<label for="switch" class="pm-switch"></label>
</div>
我有一个为 "switch" 创建的指令(元素),它使用 input[checkbox]。
只要不选中复选框的初始状态,一切正常。但是如果我想将初始状态设置为选中(基于我的控制器值),那么它总是相反的。为什么当控制器变量说它应该是值时却没有检查值?
Html
<a-switch toggle-state="vm.doSomething"></a-switch>
指令Html
<div class="switch-container">
<input type="checkbox" id="switch" />
<label for="switch" class="pm-switch"></label>
</div>
Javascript 控制器
vm.doSomething = {
state: true
};
指令
angular.module('material')
.directive('aSwitch', [
'$timeout', function($timeout) {
return {
templateUrl: 'elements/material/switch/switch.html',
transclude: false,
restrict: 'E',
scope: {
toggleState: '=',
},
link: function (scope, element) {
element.on('click touchstart', function (event) {
if (event.srcElement && event.srcElement.id && event.srcElement.id === "switch") {
event.stopPropagation();
$timeout(function() {
scope.toggleState.state = !scope.toggleState.state;
});
}
});
}
};
}
]);
我意识到为了设置泛型的选中状态
<input type="checkbox" />
我只需要添加属性"checked",喜欢
<input type="checkbox" checked />
但是如果它在我的指令 html 中,我该怎么做呢?
由于您使用的是包含 scope: { toggleState: '='}
的隔离作用域,因此您应该直接将 toggleState.state
绑定到模板中的输入框,这样 link 函数代码将使用 toggle-state
属性
toggleState
与您的控制器范围变量绑定,从而将其删除
Directive.html
<div class="switch-container">
<input type="checkbox" id="switch" ng-model="toggleState.state"/>
<label for="switch" class="pm-switch"></label>
</div>