解析器和格式化程序

解析器和格式化程序

在angular2中使用解析器和格式化程序的方法是什么?
在angular1中,可以使用ngmodelcontroller进行这样的操作:

//model -> view
ngModelController.$formatters.push(function(modelValue) {
  return modelValue.toUpperCase();
});

//view -> model
ngModelController.$parsers.push(function(viewValue) {
  return viewValue.toLowerCase();
});

你能给我举一个用安格拉2的例子吗?
upd:管道类似于angular1中的过滤器,但我不寻找过滤器,而是寻找ngmodel的解析器和格式化程序。所以“管道”不是正确的答案。

最佳答案

你能给我举一个用安格拉2的例子吗?
a.)模型->视图
使用Pipes
TS:

myString: string = "ABCDEFGH";

模板:
{{myString | lowercase}}

输出:
abcdefgh

直接使用转换
模板:
Below Input field will have lowercase string as value

<input type="text" [value]="myString.toLowerCase()">

I'm also lowercase:  {{myString.toLowerCase()}}

输出:
Input field with value "abcdefgh"

I'm also lowercase:  abcdefgh

使用getter/setter
TS:
myString: string = "ABCDEFGH";

get stillMyString() {
  return this.myString.toLowerCase();
}
set stillMyString(v) {
  this.myString = v;
}

模板:
{{stillMyString}}

输出:
abcdefgh

使用Directives
使用ControlValueAccessor
或使用上述任一组合
b.)视图->模型
使用Output/Events
模板:
Below Input field will get lowercase string as value but will store uppercase string

<input type="text" [value]="myString.toLowerCase()" (change)="myString = $event.toUpperCase()">

I'm give uppercase values automatically:  {{myString}}

输出:
Input field with initial value "abcdefgh"

I'm given uppercase values automatically:  ABCDEFGH

使用setter/getter
TS:
myString: string = "ABCDEFGH";

get stillMyString() {
  return this.myString;
}
set stillMyString(s) {
  this.myString = s.toUpperCase();
}

模板:
Below Input field will get lowercase string as value but will store uppercase string

<input type="text" [value]="stillMyString.toLowerCase()" (change)="myString = $event">

Now I'm Uppercase:  {{stillMyString}}

输出:
Input field with initial value "abcdefgh"

I'm given uppercase values automatically:  ABCDEFGH

和/或以上方法和我现在想不起来的任何其他方法的组合。
结束
正如你所看到的,有多种方法可以做同样的事情,这取决于你的需要和选择使用其中的任何一种。
验证不是转换的问题,但是您可以通过改进1>并在输入字段上使用2>来完成它。
我可以在这里向您展示3>,这里有太多的4>转换,因为5>就是这样做的,1>2>
希望有帮助:)

关于angular - Angular2中的解析器和格式化程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39457941/

10-10 07:15