Javascript 在Angularjs中绑定变量的字符串

Javascript 在Angularjs中绑定变量的字符串,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我有一个长字符串文本,在要替换的值前面有@符号。注意:长文本是生成的,它位于文本文件中,在我读取文件后,我将其置于变量中,如下所示: $scope.text = "example @by goes @you"; 我有“by”和“you”变量,我如何简单地应用它,使视图中的文本得到正确的值?我该怎么做 我可以创建自定义过滤器,搜索@by和@you,替换值或类似的技术,但可能有一种简单的方法,我不知道angular在这种情况下使用。谢谢,这是一个简单的javascript。我看不出这和角度有什么关

我有一个长字符串文本,在要替换的值前面有@符号。注意:长文本是生成的,它位于文本文件中,在我读取文件后,我将其置于变量中,如下所示:

$scope.text = "example @by goes @you";
我有“by”和“you”变量,我如何简单地应用它,使视图中的文本得到正确的值?我该怎么做


我可以创建自定义过滤器,搜索@by和@you,替换值或类似的技术,但可能有一种简单的方法,我不知道angular在这种情况下使用。谢谢,这是一个简单的javascript。我看不出这和角度有什么关系

$scope.name = 'John';
$scope.age = 25;
$scope.text = 'My name is ' + $scope.name + ' and I\'m ' + $scope.age + ' years old';

如果我理解正确的话,你想要这个。我创建了一个plnkr供你检查

 var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {   $scope.name = 'World';
    $scope.text = "example @by goes @you"; });

app.filter('byfilter',function(){   return function(input,by,you){

    return input.replace('@by',by).replace('@you',you);
       } })

{{text|byfilter:'furkan':'ahmet'}}
例如furkan去了ahmet


既然您可以轻松地转换来自te服务器的数据,并且只需修改一次,为什么还要一遍又一遍地使用$digest

我创造了一个这样做的人

angular.module('myApp', []);

angular.module('myApp').service('DataService', ['$http', '$q', function($http, $q) {
  function getData() {
    return $q(function(resolve, reject) {
      $http.get('./response.json').then(function(response) {
        resolve(response.data.value);
      });      
    });

  }

  this.getData = getData;
}]);

angular.module('myApp').controller('MyController', ['DataService', function(DataService) {
  var mv = this;
  mv.data = 'retrieving data';
  var filtered = false;

  var filterValues= {
    '@first_name': 'Hans',
    '@last_name': 'Pock',
    '@age': '79'
  };

  DataService.getData().then(function(response) {
    mv.data = filter(response, filterValues);
  });

  function filter(text, values) {
    var result = text;
    angular.forEach(values, function(value, key){
      var regexp = new RegExp(key, 'g');
      result = result.replace(regexp, value);
    });
    return result;
  }
}]);

不清楚你问了什么。长文本是生成的,它在文本文件中。很抱歉,我不创建长文本,我从文件、API或服务器等获取它。如果我创建它,是的,它会很简单。这正是我想要的。非常感谢。如果你有很长的文字,有关于绩效的注释吗?欢迎@karma,关于绩效问题,我可以向你指出与你的情况不同但类似的链接,你可以在那里找到相关信息。我认为在运行时执行此操作会产生大量不必要的开销,当您收到数据时,只需执行一次即可轻松避免。当然,在有大量文本的情况下,执行一次过滤会更好,根据您的文本大小,将过滤带到js端可以提供更好的性能。此解决方案的问题是,您只过滤第一次出现的内容,而不是所有内容。这可以通过搜索带有修饰符
g
(lobal)的正则表达式来解决。你是对的,我在某些地方注意到了摘要圈。但你们怎么解决呢,假设我有一个获取数据并返回数据的服务,但我不想在服务中更改值,而是在获取数据之后更改值。有什么消息吗?在服务得到结果之后,我该如何做,
DataService.getData().then(function(response){mv.data=response;//在这里做})我已经分叉了我的原始plunkr并将过滤器迁移到控制器,您可以在这里查看:好的,谢谢,但不知何故我找不到区别,我上面的意思是,我在控制器中有来自不同服务的过滤器值,我想在其他服务获取数据后应用它,所以它需要在控制器中应用。似乎我为您提供了旧链接,我已经更新了该插件中的代码:。