' INT'成员在子组件中不起@Input()的作用

时间:2017-09-17 05:47:42

标签: dart webstorm angular-dart

在以下代码中,int成员clicked_number的值不会更改,而Cint成员cint的值则会更改。

@Component(
  selector: 'my-app',
  template:
  '''
  <h3> Using int:</h3>
  <h4> Clicked Number:{{clicked_number}}</h4>
  <h3> Using Cint:</h3>
  <h4> Clicked Number:{{cint.i}}</h4>

  <div> Numbers: </div><div> <numbers [numbers]="numbers" [clicked_number]="clicked_number" [cint]="cint"></numbers> </div> 
  ''',
  directives: const [materialDirectives, NumbersComponent],
  providers: const [materialProviders],
)
class AppComponent {
  List<int> numbers = [ 1, 2, 3, 4, 5 ];
  int clicked_number = -1;
  Cint cint = new Cint( );
}

Cint只是一个带有类包装器的int

class Cint{ int i;  }

numbers选择器的代码是:

@Component(
  selector: 'numbers',
  styles: const[ '''
  .numbers { float: left; height: 30px; width: 310px; }
  .number:hover { background-color: #F88;}
  .number {cursor: pointer; width: 30px; height: 30px; vertical-align:middle; text-align:center; line-height: 30px; float: left;}
   ''' ],
  template:'''
  <div class="numbers">
   <div *ngFor="let n of numbers" (click)="onClick(n)" class="number"> {{n}} </div>
  </div>
  ''',
  directives: const [CORE_DIRECTIVES,formDirectives],
)

class NumbersComponent {
  @Input()   List<int> numbers;
  @Input()   int clicked_number;
  @Input()   Cint cint;

  void onClick( int i_i ) {
    clicked_number = i_i;
    cint.i = i_i;
  }

虽然这对我来说不是一个限制因素,但我非常希望理解为什么我们不能像int那样使用Cint

我在WebStorm 2017.2.3中使用Angular-Dart 4.0

1 个答案:

答案 0 :(得分:0)

这种行为不是一种角度现象,它是一种Dart语言现象。以下代码说明了纯Dart中的相同问题。

class Cint { int my_int; Cint( this.my_int ); }

void make_2 ( int i_i, Cint i_cint ) {
  i_i = 2;
  i_cint.my_int = 2;
}

void main() {
 int i = 1;
 Cint cint = new Cint( 1 );

  print( "int= $i, Cint= ${cint.my_int} \n");

  make_2( i, cint );

  print( "int= $i, Cint= ${cint.my_int} \n");

}

输出结果为:

int= 1, Cint=1
int= 1, Cint=2

对于Dart语言专家来说,解释这里发生了什么是非常有教育意义的。如果你碰巧认识这么聪明的人,请鼓励他们提供所说的解释。