Javascript 用AngularJS编译文本

Javascript 用AngularJS编译文本,javascript,angularjs,templates,frameworks,client-side,Javascript,Angularjs,Templates,Frameworks,Client Side,我有以下模板: <h1 class="text-center" ng-bind-html="row.text"></h1> 它将显示: Hi your name is {{ name }} 而不是实际的{{name}绑定 是否需要计算或编译此row.text表达式?我不确定这是否是您想要的: HTML 输出 I can add: 1 + 2 = 3 {{a}} 但是我相信您必须评估或编译文本…1:在花了一些时间讨论这个问题之后,我发现解析一个可能包含Angul

我有以下模板:

<h1 class="text-center" ng-bind-html="row.text"></h1>
它将显示:

  Hi your name is {{ name }}
而不是实际的
{{name}
绑定


是否需要计算或编译此row.text表达式?

我不确定这是否是您想要的:

HTML

输出

I can add: 1 + 2 = 3
{{a}}

但是我相信您必须评估或编译文本…

1:在花了一些时间讨论这个问题之后,我发现解析一个可能包含AngularJS表达式的字符串,一种方法如下

假设您的$scope是:{“name”:“my name”}

字符串表达式位于变量v:var v=“Hello,{{name}”

然后,您将在结果变量中获得以下字符串:Hello,my name

然后我将把答案注入scope变量

但是,这样做的一个问题是,一旦这样做,结果就是一个字符串,因此对范围中“name”变量的任何更改将不再影响特定的已计算表达式

参考:

2:如果数据绑定仍然很重要,我所做的不是像那样进行间接寻址,而是创建一个自定义模板字符串,例如“Hello{{name}”

并据此进行汇编:

$compile($scope.row.text)($scope)
参考:


我在一个指令中尝试了这两种方法,现在它正在工作。

我使用
$templateCache
解决了这个问题,如下所示:

在控制器中:

myApp.controller('RowCtrl', function ($scope, $templateCache) {

    $scope.row = {
       id: 2,
       text: '{{ name }}'
    };

    var row_tmpl = 'row-tmpl-' + row['id'];
    $templateCache.put(row_tmpl, row.text);
    $scope.row_tmpl = row_tmpl;
});
  <div ng-include src="row_tmpl" >

  </div >
在模板中:

myApp.controller('RowCtrl', function ($scope, $templateCache) {

    $scope.row = {
       id: 2,
       text: '{{ name }}'
    };

    var row_tmpl = 'row-tmpl-' + row['id'];
    $templateCache.put(row_tmpl, row.text);
    $scope.row_tmpl = row_tmpl;
});
  <div ng-include src="row_tmpl" >

  </div >


编辑后,我意识到它可能不会重复。您既没有ng型号,也没有绑定的
名称
。显示更多代码这是绑定的一种非常奇怪的用法,我想有更好的方法来实现这一点。您能解释一下为什么在变量
行中有一个模板。text
?实用的方法是为
定义一个专用指令,您的名字是{{name}
,在您的情况下,您需要一个通用指令,在将模板附加到
$element
之前,
$compile
对模板进行编译,我试图编译,但我相信编译只能用于模板,因为它给了我某种无效的表达式错误。我的表达式更像是一个内部HTML表达式。Eval我相信只对“row.text”这样的表达式进行处理,而不是对整个HTML字符串进行处理。我相信$interpolate就是答案。我到家后会检查(现在我只有一部iPhone)并更新线程。我已经用$interpolate更新了你的小提琴。谢谢你的设置。
myApp.controller('RowCtrl', function ($scope, $templateCache) {

    $scope.row = {
       id: 2,
       text: '{{ name }}'
    };

    var row_tmpl = 'row-tmpl-' + row['id'];
    $templateCache.put(row_tmpl, row.text);
    $scope.row_tmpl = row_tmpl;
});
  <div ng-include src="row_tmpl" >

  </div >