1

AngularJSビューで文を作成しようとしています。たとえば、変数を使用{overdue: 5, name: "Kasper"}して、が必要"{{overdue}} days overdue. Employee: {{name}}"です。

関数を使ってみました:

function renderLine() {
    var results = new Array();
    if (overdue) {
        result.push("{{overdue}} days overdue");
    }
    if (overdue) {
        result.push("{{points}} points");
    }
    /* combine into a string */
    var result = "";
    for (var i = 0; i < results.length; i+=1) {
        if (result.length != 0) {
            result += ", ";
        }
        result += results[i];
    }
    if (result.length > 0) {
        result += ". ";
    }
    /* add name */
    result += "Name: {{name}}";
    return result,
}

より具体的には、私の質問は、プログラムで構築され、ディレクティブを角度処理する文字列で{{variable}}のような角度ディレクティブをどのように使用できるかということです。文字列は異なる言語に翻訳され、文内の変数の配置が変わる可能性があるため、ディレクティブを使用せずに文字列を作成したくありません。

4

2 に答える 2

1

結局、角度ディレクティブを作成しました。ui-ifandディレクティブは、DOM操作ディレクティブのngRepeat開始点として適していました。多少変更されたディレクティブのコードがあります。

angular.module("hk").directive("myDirective", 
[       "$interpolate", "$log",
function($interpolate,   $log) {
    return {
        transclude: 'element',
        replace: false,
        restrict: 'A',
        terminal: true,
        compile: function(tElement, tAttrs, linker) {
            return function(scope, elem, attr) {
                var lastElement;
                var lastScope;
                var expression = attr.myDirective;
                scope.$watch(expression, function (item) {
                    if (lastElement) {
                        lastElement.remove();
                        lastElement = null;
                    }
                    if (lastScope) {
                        lastScope.$destroy();
                        lastScope = null;
                    }
                    lastScope = scope.$new();
                    lastScope.item = item;
                    linker(lastScope, function (clone) {
                        lastElement = clone;
                        var results = [];
                        if (item.isactive) {
                            results.push("++{{item.createdtime | age}} active");
                            if (item.status == 'started') {
                                results.push("++{{item.startedtime | age}} started: {{item.startedby_displayname}}");
                            }
                        }
                        if (item.islate) {
                            results.push("++{{item.latetime | age}} past due");
                        }
                        var result = "";
                        for (var i = 0; i < results.length; i+=1) {
                            if (result.length != 0) {
                                result += ", ";
                            }
                            result += results[i];
                        }
                        if (result.length > 0) {
                            result += ". ";
                        }
                        if (!item.startedby_displayname) {
                            if (item.assignedto_displayname) {
                                result += "++Assigned to {{item.assignedto_displayname}}.";
                            }
                        }
                        var interpolated = $interpolate(result)(lastScope);
                        elem.after(interpolated);
                    });
                });
            };
        }
    };
}]);
于 2013-01-03T11:28:09.997 に答える
0

私はあなたが$scope.$evalあなたの目的のために使うことができると思います。このフィドルを見る

次のようなメッセージを作成できます。

$scope.$eval('"Hello "+name');

次に、評価する文字列を言語ごとに変更します。

{de: '"Hallo " + name', it: '"Buon giorno "+ name', fr: '"Salut " +name'} 

またはそれらの線に沿った何か(もちろん、それらの翻訳をチェックしてもらいたいでしょう)。

ディレクティブを作成し、$ compileを使用して、現在機能している正確な文字列を保持することもできます。

于 2013-01-02T19:43:07.563 に答える