有没有办法检查角度指令是否存在?
我想做的,或者更好的我所拥有的:“协议”的集合,它们有一些相似之处,例如:名称、创建者、上次编辑、评论等,但它们都有特殊的字段。
我有一个与所有这些协议相匹配的指令。显示名称和所有协议共有的所有内容。在这个指令中,我想检查给定协议的特殊(更具体)视图是否可用。就我而言,我称之为“CompactView”。CompactView 将给出该协议的更详细信息,它应该显示在实际指令中。所以一个嵌套指令 - 没什么大不了的。
我的第一个 approched 工作正常,我有一个数组,其中协议名称为键,指令 html 元素(字符串)为值:
let decider = {
'cardiovascular_function': '<hcd-Cardiovascular-Function-Compact-View protocol="protocol"/>'
};
//use suitable directive
let protocolDirective = decider[scope.protocol.name];
let templateHook = angular.element(element).find('.extend-protocol-info')[0];
//use base template
//hooks protocol directive into template if possible
if (typeof protocolDirective != 'undefined') {
let compiled = $compile(angular.element(protocolDirective))(scope);
angular.element(templateHook).html(compiled);
scope.defaultTxt = false;
}else{
scope.defaultTxt = true;
}
如果在决定器数组中没有退出键,我将显示一些默认的 txt 解释,即没有可用的 CompactView。
应用程序可能会增长,并且会遵循许多协议,因此当有人创建协议时,需要扩展决策器数组。容易失败,如果我可以检查具有某个名称的指令是否存在并编译它会更好。
我的新方法如下所示:
let protocolName = scope.protocol.name;
let directiveName = 'hcd' + _.capitalize(_.camelCase(protocolName)) + 'CompactView';
//example: <hcd-Cardiovascular-Function-Compact-View protocol="protocol"/>
console.log(directiveName);
console.log($injector.has(directiveName));
try {
console.log(angular.module('hcdProtocol').directive(directiveName));
} catch (err) {
console.log(err);
}
//check if directive for given protocol exists
if ($injector.has(directiveName)) {
scope.defaultTxt = false;
let templateHook = angular.element(element).find('.extend-protocol-info')[0];
let protocolDirective = '<hcd-' + _.kebabCase(protocolName) + '-Compact-View protocol="protocol" />';
let compiled = $compile(angular.element(protocolDirective))(scope);
angular.element(templateHook).html(compiled);
} else {
//display default if no compact view exists
scope.defaultTxt = true;
}
所以 $injector.has 不起作用,因为指令没有在 $provide 中注册。重新声明和检查错误,try catch 块,也不起作用。
我目前正在尝试了解 $compileProvider,角度内的某处是存在指令的信息,我很想找到它。
关于如何解决这种“通用指令”方法的任何想法或建议?也许我对这个嵌套指令的概念是错误的,并且有一个更简单的方法?
两个代码块都在directive() 的链接函数中