gpt4 book ai didi

javascript - HTML 文件作为 AngularJS 指令中 Bootstrap 弹出窗口的内容

转载 作者:技术小花猫 更新时间:2023-10-29 11:47:59 25 4
gpt4 key购买 nike

我有一个 Angular 指令来处理 Bootstrap 弹出窗口,如下面的代码所示。在我的指令中,我将弹出窗口内容设置为 HTML 字符串,我认为这很丑陋。我想做的是使用“template.html”文件而不是 HTMLstring。这样,我将能够根据我想要显示的弹出窗口类型,对不同的模板文件使用相同的指令。无论如何,这就是我的计划。

那么,如何以最佳方式从我的 template.html 加载 html 代码,并在下面的 AngularJs 指令中使用它而不是 HTMLstring?

app.directive('mypopover', function ($compile) {

var HTMLstring = "<div><label class='control-label' style='color: rgb(153, 153,153)'>Search</label>&nbsp;&nbsp;"+"<input placeholder='Search assignment' ng-model='searchText' type='text' class='form-control'> <br>"+"<label class='control-label' style='color: rgb(153, 153, 153)'>Select an assignable</label>"+"<p ng-repeat='p in projects | filter:searchText'ng-click='createEvent(user.id,date)'>"+"{{p.title}}</p></div>";

var getTemplate = function (contentType) {
var template = '';
switch (contentType) {
case 'user':
template = HTMLstring;
break;
}
return template;
}
return {
restrict: "A",
link: function (scope, element, attrs) {
var popOverContent;
if (scope.user) {
var html = getTemplate("user");
popOverContent = $compile(html)(scope);
}
var options = {
content: popOverContent,
placement: "right",
html: true,
date: scope.date
};
$(element).popover(options);
},
scope: {
user: '=',
date: '='
}
};
});

最佳答案

一个快速的解决方案是使用带有内联模板的 templateCache:

内联模板:

<script type="text/ng-template" id="templateId.html">
This is the content of the template
</script>

Js:

app.directive('mypopover', function ($compile,$templateCache) {

var getTemplate = function (contentType) {
var template = '';
switch (contentType) {
case 'user':
template = $templateCache.get("templateId.html");
break;
}
return template;
}

DEMO

如果需要加载外部模板,需要使用ajax $http 手动加载模板并放入缓存。然后您可以使用 $templateCache.get 稍后检索。

$templateCache.put('templateId.html', YouContentLoadedUsingHttp);

示例代码:

var getTemplate = function(contentType) {
var def = $q.defer();

var template = '';
switch (contentType) {
case 'user':
template = $templateCache.get("templateId.html");
if (typeof template === "undefined") {
$http.get("templateId.html")
.success(function(data) {
$templateCache.put("templateId.html", data);
def.resolve(data);
});
} else {
def.resolve(template);
}
break;
}
return def.promise;
}

DEMO

关于javascript - HTML 文件作为 AngularJS 指令中 Bootstrap 弹出窗口的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com