我正在写一个指令,我想要一个可以接受表达式,模板url或字符串的属性。有没有我可以使用的角度方法来解决这样的参数?我的意思是我可以做的......
<directive dialog="path/to/template.htm"></dialog>
或
<directive dialog="Are you sure you want to do that?" type="confirm"></dialog>
在我的指令代码中,我需要做的就是......
directive('dialog', function ($http) {
return {
compile: function (element, attrs) {
var dialogContent = angular.resolveExpression(attrs.dialog);
}
}
}).
这个想法是,如果template.htm
包含其中的表达式或指令,它们都将被正确解析。
答案 0 :(得分:2)
您应该使用attribute $observe
来实现它,当属性发生变化时,您甚至会获得更新:
app.directive('test', function() {
return {
link: function(scope, elm, attr) {
attr.$observe('dialog', function(value) {
// this function will run everytime the attribute evaluate to
// a different value, and "value" will be the already interpolated
// string.
});
}
};
});
这是一个有效的Plnker。
答案 1 :(得分:1)
正确的方法是使用&
范围选项......
directive('slideToggle', function () {
return {
replace: true,
restrict: 'E',
scope: {
on: '&',
off: '&',
bindto: '='
},
template: '<input type="checkbox" name=""/>',
link: function (scope, element, attrs) {
$(element).iButton({
labelOn: attrs.onlabel,
labelOff: attrs.offlabel,
enableDrag: (attrs.draggable == "false") ? false : true,
change: function () {
if (scope.bindto) {
scope.bindto = false;
scope.on();
} else {
scope.bindto = true;
scope.off();
}
scope.$apply();
}
});
}
}
})
然后在我的HTML中:
<slide-toggle onLabel="Active" offLabel="Inactive" bindTo="workstation.active" off="makeInactive()" on="makeActive()"></slide-toggle>