用json值替换angularjs中的部分字符串

时间:2015-08-03 12:07:18

标签: javascript json angularjs

我正在尝试将$中包含的字符串单词替换为JSON值。

例如:

我有json。

$scope.data = {
  name: "Some Name",
  user: "User Name",
  designation: "Designation",
  fullName:"User Full Name"
}

我有字符串:

$scope.str="User name of $user$ is $name$ and designation is  $designation$";

是否有任何角度方法可以直接从此字符串中替换变量?

我尝试使用循环键并验证,它正在工作但是json中有超过100个键,并且字符串中可能会少于20个键。

我期待更好的方法来提高性能。

2 个答案:

答案 0 :(得分:3)

<强> 1)。 String.prototype.replace 即可。使用String.prototype.replace方法在纯Javascript中执行它实际上是有意义的,它会更有效。例如:

$scope = {};
$scope.data = {
    name: "Some Name",
    user: "User Name",
    designation: "Designation",
    fullName: "User Full Name"
};

$scope.str = "User name of $user$ is $name$ and designation is  $designation$";

$scope.str = $scope.str.replace(/\$(\w+)\$/g, function(a, b) {
    return typeof $scope.data[b] !== 'undefined' ? $scope.data[b] : ''; 
});

alert($scope.str);

如果您打算再使用一次“微型温度计”,请考虑将其移至单独的服务中。

<强> 2)。 Angular $ interpolate 。如果您可以将占位符语法更改为{{name}}

,也可以使用插值服务
app.controller('MainCtrl', function($scope, $interpolate) {

    $scope.data = {
        name: "Some Name",
        user: "User Name",
        designation: "Designation",
        fullName: "User Full Name"
    };

    $scope.str = "User name of {{user}} is {{name}} and designation is  {{designation}}";

    $scope.str = $interpolate($scope.str)($scope.data);
});

再次,您可以在其上构建简单的模板服务:

app.service('template', function($interpolate) {
    return function(str, data) {
        return $interpolate(str)(data);
    };
});

并在控制器中使用它:

$scope.str = template($scope.str, $scope.data);

答案 1 :(得分:2)

这不是纯粹的角度,但如果您使用Lodash(实用程序库参与许多项目)进行更改,则有模板方法。 您可以轻松配置占位符语法

_.templateSettings.interpolate = /\$([\s\S]+?)\$/g;
var compiled = _.template('User name of $user$...');
compiled({ 'user': 'Foo' });