所以我有一个名为test.html的模板:
mynameis: {{mynameis}}
然后我有一个带有以下代码的控制器:
$scope.mynameis = 'slim shady';
var newScope = $scope.$new();
var newElem = '<ng-src><div ng-include="\'./test.html\'" ></div></ng-src>';
var emailtext = angular.element(newElem);
var myres = $compile(emailtext)(newScope);
$timeout(function(){
console.log('OUTPUT',myres[0].innerHTML);
console.log('OUTPUT ALL',myres[0]);
var htmlEmaiBody = emailtext.html();
var ToRecipients = [{EmailAddress: {Address: 'myemail@gmail.com'}}];
var emailPayload = {Message: {Subject: 'subject',Body: {ContentType: 'Html',Content: '<b>manual html</b><br>'+htmlEmaiBody},ToRecipients: ToRecipients}};
Office365MailService().messages().sendOnFly(emailPayload).then(function () {
console.log('email sent');
}, function (error) {
console.log('email not sent');
console.log(error);
});
});
Office365MailService只是另一个发送邮件的函数。 NB:之前有效。必须做出一些改变,因为它不再起作用了。
我在控制台中看到的是:
OUTPUT <!-- ngInclude: './test.html' -->
但我也看到了文字&#34; OUTPUT ALL&#34;这个html结构:
<ng-src class="ng-scope"><!-- ngInclude: './test.html' --><div ng-include="'./test.html'" class="ng-scope"><span class="ng-binding ng-scope">mynameis: slim shady</span></div></ng-src>
我收到的邮件只包含粗体&#34;手册html&#34;。
然后我查看了我的电子邮件客户端中的邮件来源,最后我看到了这一点:
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=>
</head>
<body>
<b>manual html</b><br>
<!-- ngInclude: './views/matching/testTemplate.html' -->
</body>
</html>
为什么呢?是不是模板被编译或者是什么?我在超时时这样做,因为我知道你必须等待编译功能准备就绪。但是,仍然没有包含test.html-template中的任何内容。 但是,在输出到控制台时,名称&#34; slim shady&#34;是从模板打印出来的。所以问题不应该是模板没有编译和准备好。它可能是什么?
答案 0 :(得分:0)
解决方案是在加载模板时使用回调。
$templateRequest(templateName).then(function(template) {
上面的代码是第一件要做的事情。然后在回调中,您可以使用编译和超时。否则,使用我的旧代码,模板的编译是一个尚未提取的模板上的编译。 所以这是一个异步问题。