【发布时间】:2015-12-13 20:09:24
【问题描述】:
我正在尝试将属性 - 选项卡标题从 html 访问到我的指令中,并且根据该指令应该更改 html 模板。 下面是代码 HTML
.directive('contentItem', function($compile) {
var locationTemplate = '<div class="container"><div class="row"><div class="col-md-6 form-horizontal" style="border:1px solid"><select id="location" ng-change="detailCtlr.getLocation()" class="form-control" ng-model="detailCtlr.locSelected"><option ng-repeat="option in detailCtlr.typeArr" value="{{option.typeId}}">{{option.type}}</option></select></div></div></div>';
var peopleTemplate = '<div class="container">klfdjsfsjldjs</div>';
var getTemplate = function(contentType) {
switch (contentType) {
case 'Locations':
template = locationTemplate;
break;
case 'People':
template = peopleTemplate;
break;
}
return template;
}
var linker = function(scope, element, attrs) {
console.dir(scope.content);
element.html(getTemplate(scope.content)).show();
$compile(element.contents())(scope);
}
return {
// template: function(tElement, tAttrs) {
// console.log("in template");
// console.log(tAttrs.content);
// console.dir(tAttrs.content);
// console.log("making templte");
//
//
// return getTemplate(tAttrs.content);
// },
restrict: "E",
replace: true,
link: linker,
scope: {
content: '='
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<uib-tab ng-repeat="tab in tabs" select="Ctlr.getTabInfo(tab.title,$index)" active="" heading="{{tab.title}}">
<content-item content="tab.title"></content-item>
</uib-tab>
我能够在链接器函数中访问内容“tab.title”但是,使用 {{detailCtlr.getLocation()}} 代码的 angularJS 链接代码不起作用。如果我直接在模板中返回 html,则代码有效但没有办法获得“tab.title”值......我尝试了很多事情,比如改变范围,传递一个 $index 来识别标签,但似乎没有任何工作......有什么建议吗?提前致谢!
【问题讨论】:
-
这是一个典型的例子,说明你应该解释你想要达到的目标,而不是要求一个具体的解决方案。通常,当您尝试在指令中的不同模板之间切换时,您做错了。指令应该有 1 个模板 - 并且根据逻辑包含子指令。
标签: javascript angularjs templates dynamic angularjs-directive