将显示值格式传递给角度分量

时间:2017-03-30 13:44:57

标签: javascript angularjs regex string formatting

我想将显示值的格式传递给角度组件。

例如:

format="'(utc, offset) location (tz)'" === '(UTC -04:00) New York (EDT)'

format="'(tz, offset) location'" === '(EDT -04:00) New York'

我们的想法是,该值将按照给定的格式显示,包括括号。 我猜想实现这一目标的最佳方法是获得所需格式的数组? 因此,给定以下字符串,如何生成以下数组:

'(utc, offset) location (tz)' === ['(', 'utc-code', 'offset-hours', ')', 'location', '(', 'tz-code', ')'];

'(tz, offset) location' === ['(', 'tz', 'offset', ')', 'location']

1 个答案:

答案 0 :(得分:2)

您可以使用组件inline unsigned U(float f) { union { unsigned u; float f; } t; t.f = f; return t.u; } 来传递值。这里将在每个摘要周期中调用binding,这提供了检测绑定更改并对其进行操作的机会。

我用正则表达式编写了一个简单的逻辑来显示输入格式的数据。希望这种方法有助于代替您的阵列方法。



$doCheck

angular.module('app',[])
.controller('appCtrl', function($scope){
  $scope.format = '(offset) location (tz)';
})
.component('myComponent', {
  template: '<div>{{$ctrl.formattedValue}}</div>',
  controller: myComponentCtrl,
  bindings: {
    format: '='
  }
});

function myComponentCtrl(/*your DI goes here*/){
  console.log('log from component: format->'+this.format);
  var self = this;
  this.formattedValue = '';
  
  this.$doCheck = function(){ 
    var sampleDateObject = {
      tz: 'CDT',
      offset: '-4:00',
      location: 'Chicago',
      year: 2017
    }
    self.formattedValue = self.format.replace(/([a-z]+)/gi, function(match){
      return sampleDateObject[match]?sampleDateObject[match]:match;
    });
  };
}

myComponentCtrl.$inject = [/*your DI goes here as string*/];
&#13;
&#13;
&#13;