2017-09-20 5 views
0

としてコンパイル角度のテンプレートを送信するので、私は、このテンプレートの名前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: '[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は、その唯一の別の関数でありますメールを送る。 注意:これは前に働いた。もはや動作していないので、いくつかの変更が行われているに違いありません。

私がコンソールに表示することです:

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

しかし、私はまた、このHTML構造を持つテキスト「OUTPUTのALL」を参照してください:私が受け取る

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

メールのみ太字が含まれています"マニュアルhtml"。

私はその後、私の電子メールクライアントでメッセージのソースを見て、私は最後にこれを参照してください。

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テンプレートには何も含まれていません。 しかし、コンソールへの出力では、テンプレートから "slim shady"という名前が印刷されました。だから問題は、テンプレートがコンパイルされていないということではありません。どうなり得るか?

答えて

0

解決策は、テンプレートを読み込むときにコールバックを使用することです。

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

上記のコードは、最初に行うことです。コールバックでは、コンパイルとタイムアウトを使用することができます。さもなければ、私の古いコードでは、テンプレートのコンパイルは、まだフェッチされていない可能性のあるテンプレート上のものでした。 それは非同期問題でした。

関連する問題