如何修改 Angular 中的指令模板 class 名称?
How to modify directive template class name in Angular?
这里是jsfiddle。
HTML:
<div ng-app="app">
<my-checkbox text="apple" status=true></my-checkbox>
<my-checkbox text="pineapple" status=false></my-checkbox>
<my-checkbox text="peach" status=true></my-checkbox>
</div>
JS:
angular.module("app", [])
.directive("myCheckbox", function(){
return {
restrict: "E",
scope: true,
link: function(scope, ele, attr){
var iconChecked = "glyphicon-ok-sign";
var iconUnChecked = "glyphicon-remove-sign";
scope.icon = attr.status ? iconChecked : iconUnChecked;
scope.name = attr.text;
ele.bind("click", function() {
attr.status = !attr.status;
});
},
template: "<div><span><i class='glyphicon {{icon}}'></i><span>{{name}}</span></span></div>"
};
});
当我点击它时图标没有改变。我做错了什么?有人帮忙吗?
干杯!
对于初学者来说,如果你想改变属性值,使用attr.$set
,例如
ele.on('click', function() { // seriously, why does everyone use bind?
attr.$set('status', !attr.status);
});
其次,您应该观察状态属性以更新范围 icon
以及由于 DOM 事件(如 click
)不这样做而手动触发摘要
var iconChecked = "glyphicon-ok-sign";
var iconUnChecked = "glyphicon-remove-sign";
attr.$observe('status', function(status) {
if (typeof status === 'string') {
status = scope.$eval(status);
attr.$set('status', status);
}
scope.icon = status ? iconChecked : iconUnChecked;
});
scope.name = attr.text;
ele.on("click", function() {
attr.$set('status', !attr.status);
scope.$apply();
});
这里是jsfiddle。
HTML:
<div ng-app="app">
<my-checkbox text="apple" status=true></my-checkbox>
<my-checkbox text="pineapple" status=false></my-checkbox>
<my-checkbox text="peach" status=true></my-checkbox>
</div>
JS:
angular.module("app", [])
.directive("myCheckbox", function(){
return {
restrict: "E",
scope: true,
link: function(scope, ele, attr){
var iconChecked = "glyphicon-ok-sign";
var iconUnChecked = "glyphicon-remove-sign";
scope.icon = attr.status ? iconChecked : iconUnChecked;
scope.name = attr.text;
ele.bind("click", function() {
attr.status = !attr.status;
});
},
template: "<div><span><i class='glyphicon {{icon}}'></i><span>{{name}}</span></span></div>"
};
});
当我点击它时图标没有改变。我做错了什么?有人帮忙吗?
干杯!
对于初学者来说,如果你想改变属性值,使用attr.$set
,例如
ele.on('click', function() { // seriously, why does everyone use bind?
attr.$set('status', !attr.status);
});
其次,您应该观察状态属性以更新范围 icon
以及由于 DOM 事件(如 click
)不这样做而手动触发摘要
var iconChecked = "glyphicon-ok-sign";
var iconUnChecked = "glyphicon-remove-sign";
attr.$observe('status', function(status) {
if (typeof status === 'string') {
status = scope.$eval(status);
attr.$set('status', status);
}
scope.icon = status ? iconChecked : iconUnChecked;
});
scope.name = attr.text;
ele.on("click", function() {
attr.$set('status', !attr.status);
scope.$apply();
});