我正在尝试将$
中包含的字符串单词替换为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个键。
我期待更好的方法来提高性能。
答案 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' });