2017-09-20 1 views
0

So habe ich diese Vorlage mit dem Namen test.html:Senden zusammengestellt Winkel Vorlage als Mail-Körper

mynameis: {{mynameis}} 

ich mit dem folgenden Code einen Controller haben dann:

$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: '[email protected]'}}]; 
    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 ist nur eine andere Funktion, die sendet eine Mail. NB: Dies hat vorher funktioniert. Einige Änderungen müssen vorgenommen worden sein, da es nicht mehr funktioniert.

Was ich in der Konsole zu sehen ist:

OUTPUT <!-- ngInclude: './test.html' --> 

Aber ich auch den Text "OUTPUT ALL" mit dieser HTML-Struktur sehen:

<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> 

Die Post, die ich nur erhalten enthält die bolded "manuelle HTML".

Ich habe dann einen Blick auf die Quelle der Nachricht per E-Mail-Client, und ich sehe dies am Ende:

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> 

Warum? Wird die Vorlage nicht kompiliert oder was? Ich mache das in der Zeitüberschreitung, als ich erfuhr, dass Sie warten müssen, bis die Kompilierfunktion fertig ist. Aber nichts von der test.html-Vorlage ist enthalten. In der Ausgabe an die Konsole wurde jedoch der Name "slim shady" aus der Vorlage gedruckt. Das Problem sollte also NICHT sein, dass die Vorlage nicht kompiliert und fertig ist. Was könnte es sein?

Antwort

0

Die Lösung besteht darin, beim Laden der Vorlage einen Rückruf zu verwenden.

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

Der obige Code ist das erste, was zu tun ist. Dann können Sie im Callback Compile und Timeout verwenden. Ansonsten, mit meinem alten Code, war die Zusammenstellung der Vorlage eine Vorlage, die noch nicht abgerufen werden konnte. SO war es ein Async-Problem.