将编译的角度模板作为邮件正文发送

时间:2017-09-20 11:58:51

标签: javascript html angular

所以我有一个名为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;是从模板打印出来的。所以问题不应该是模板没有编译和准备好。它可能是什么?

1 个答案:

答案 0 :(得分:0)

解决方案是在加载模板时使用回调。

$templateRequest(templateName).then(function(template) {

上面的代码是第一件要做的事情。然后在回调中,您可以使用编译和超时。否则,使用我的旧代码,模板的编译是一个尚未提取的模板上的编译。 所以这是一个异步问题。