2

AngularJsを使用してテンプレートをページ上ではなく、おそらくメモリ内にレンダリングすることは可能ですか?メールで送信するHTMLを準備する必要があります。私は隠されたdivで何かをレンダリングし、それから何らかの方法でそれを変数にコンテンツを割り当てることができると思いますが、私にとっては醜いように見えます:(

4

2 に答える 2

2

$compile 関数を見ることができます: http://docs.angularjs.org/api/ng .$compile

例:

function MyCtrl($scope, $compile){
  // You would probably fetch this email template by some service
  var template = '</div>Hi {{name}}!</div></div>Here\'s your newsletter ...</div>'; // Email template

  $scope.name = 'Alber';

  // this produces string '</div>Hi Alber!</div></div>Here\'s your newsletter ...</div>'
  var compiledTemplate = $compile(template)($scope); 

};
于 2013-02-22T12:10:25.770 に答える
0

もちろん、$compile サービスを使用してテンプレートをレンダリングできます。レンダリングされたテンプレートは、DOM ツリーに接続されていない DOM ノードになります。また、コンテンツを取得するために添付する必要はありません。次のようなことができます。

<!doctype html>
<html ng-app="myApp">
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
    <script type="text/javascript">
    var myApp = angular.module('myApp', []);

    myApp.controller('MainCtrl', ['$scope', '$compile', function($scope, $compile){
        var compiled;
        $scope.compileTemplate = function() {
            var template = '<ul><li ng-repeat="i in [1, 2, 3]">{{i}}</li></ul>';
            var linker = $compile(template);
            compiled = linker($scope);
        }
        $scope.sendEmail = function() {
            alert("Send: " + compiled[0].outerHTML);
        }
    }]);
    </script>
</head>
<body ng-controller="MainCtrl">
    <button ng-click="compileTemplate()">Compile template</button>
    <button ng-click="sendEmail()">Send email</button>
</body>
</html>

ここでそれらを 2 つの異なる関数に分けた理由は、コンパイルしてスコープにリンクすると、次のダイジェストが終わるまでテンプレートにデータが入力されないためです。つまりcompiled[0].outerHTML、関数の最後にアクセスすると、compileTemplate()(タイムアウトを使用しない限り...) 満たされません。

于 2013-02-22T12:23:12.983 に答える