嵌套指令,子指令don't "transclude"正确
Nested directive, child don't "transclude" correctly
下面是我要做的:http://jsfiddle.net/Dtg3N/
'use strict';
var navbar = angular.module('navbarApp', []);
navbar.directive('navbar', function () {
return {
restrict: 'E',
transclude: true,
scope: {},
template: '<div class="navbar"><div class="navbar-inner"><div class="nav-collapse collapse">'+
'<ul class="nav" ng-transclude></ul>'+
'</div></div></div>',
};
});
navbar.directive('navItem', function ($compile) {
var brandTpml = '<li class="brand" ng-transclude></li>';
var dropdownTmpl = '<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ title }} <b class="caret"></b></a><ul class="dropdown-menu" ng-transclude></ul>';
var simpleTmpl = '<li ng-transclude></li>';
var getTemplate = function(itemType) {
var template = '';
switch (itemType) {
case 'brand':
template = brandTpml;
break;
case 'dropdown':
template = dropdownTmpl;
break;
default:
template = simpleTmpl;
break;
}
return template;
};
var itemType;
return {
restrict: 'E',
replace: true,
transclude: true,
link: function(scope, element, attrs) {
itemType = attrs.type;
},
template: getTemplate(itemType)
};
});
简而言之,我想在指令中嵌套。它几乎可以工作,除了' translude '的东西不能用于嵌套的元素。
我怎样才能得到这份工作?
问题出在下面一行:
template: getTemplate(itemType)
参数itemType还不知道。它没有定义。稍后调用link函数。你必须在link函数中动态切换模板,并使用$compile()编译它们,例如
$compile(getTemplate(itemType))(scope)
然后你会得到一个可以插入到DOM中的元素
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 参数变量出现ngTable指令问题
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 使用每次都不同的transclude重复指令
- 打开一个模态并将其链接到AngularJS中的指令
- 从html创建一个指令,该指令按类名应用函数
- 铬:“;未捕获的语法错误:意外的标记:"
- 将JSON对象传递给angular指令
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- JavaScript指令不能像我想象的那样工作
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- AngularJs指令,该指令创建内部有数据对象的新指令
- AngularJS指令只识别双向绑定类型
- "ctrl”;在指令中的LINK中未定义
- "要求“;Angular指令的DDO选项在应该抛出错误时不会抛出错误
- "TypeError:无法调用方法'匹配'未定义的“;Angular JS指令中的Morris
- 没有内联脚本,仍然得到"由于内容安全策略指令而被拒绝:“;脚本src'self'&”;
- 是否有一种方法可以确定指令范围“&"项已设置为某个内容