Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

298
Views
¿Cuándo usar corchetes [] en las directivas @Inputs y cuándo no?

Estoy un poco confundido.

Vea esta directiva simple:

 @Directive({ selector: '[myDirective]' }) export class MyDirective { private text: string; private enabled: boolean; @Input() myDirective:string; @Input('myText') set myText(val: string) { this.text = val; } @Input('myEnabled') set myEnabled(val: boolean) { this.enabled = val; } ngOnInit() { console.log("myDirective string: " + this.myDirective); console.log("myText string: " + this.text); console.log("myEnabled boolean: " + this.enabled); } }

si mi html se verá así:

 <div [myDirective]="myDefaultText" [myEnabled]="true" [myText]="abc"></div>

La salida será:

 myDirective string: myDefaultText real value // good myEnabled boolean: true // good myText string: undefined // Why?

Si QUITO el [] de myText :

 <div [myDirective]="myDefaultText" [myEnabled]="true" myText="abc"></div>

La salida será:

 myDirective string: myDefaultText real value // good myEnabled boolean: true // good myText string: abc // GOOD

También puedo eliminar el [] de myEnabled y también funcionará. Así que aquí está mi confusión: cuando necesito usar corchetes [] y cuando no, aunque quiero que el usuario que va a usar myDirective nunca tenga que preguntarse si o no, creo que los corchetes [] siempre deben ser allí. ¿no es así?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Cuando usa [] para enlazar a un @Input() , es básicamente una expresión de plantilla.

De la misma manera, mostrar {{abc}} no mostraría nada (a menos que realmente tuviera una variable llamada abc ).

Si tiene una cadena @Input() y desea vincularla a una cadena constante, puede vincularla así: [myText]=" 'some text' " , o en resumen, como un atributo HTML normal: myText="some text" .

La razón por la que [myEnabled]="true" funcionó es porque true es una expresión de plantilla válida que, por supuesto, se evalúa como booleana true .

over 4 years ago · Santiago Trujillo Report

0

Si escribe <img [src]="heroImageUrl"> significa que el lado derecho heroImageUrl es una expresión de plantilla.

La diferencia simple entre [myText]="abc" y myText="abc" es que en el primero le está pidiendo a angular que establezca la PROPIEDAD de destino myText usando la expresión de plantilla abc , mientras que en el último establece la propiedad de destino llamada myText usando el cadena 'abc'.

Entendamos un poco más sobre HTML.

En HTML puedes definir un elemento como este.

 <input type="text" value="Bob">

input es un elemento cuyos attributes son tipo y valor. Cuando su navegador analice esto, creará una entrada DOM (un objeto) para este elemento. La entrada DOM tendrá algunas properties como align, baseURI, childNodes, children, etc. Entonces, esa es la diferencia entre los atributos HTML y las propiedades DOM Ver referencia . A veces, el atributo y la propiedad tienen los mismos nombres, lo que genera confusión. Para la etiqueta de entrada anterior, tiene el value de atributo = Bob y también tiene un value de propiedad que tendrá el valor de lo que escriba en el cuadro de texto. En resumen, el atributo es lo que define sobre la etiqueta y la propiedad es lo que se genera en el árbol DOM.

En el mundo de Angular, la única función de los atributos es inicializar el elemento y posiblemente el estado de la directiva. Cuando escribe un enlace de datos, está tratando exclusivamente con propiedades y eventos del objeto de destino. Los atributos HTML desaparecen efectivamente.

Entonces, para resumir, en <div [myDirective]="myDefaultText" [myEnabled]="true" [myText]="abc"></div> esencialmente estás diciendo que:

  1. aplicar la directiva myDirective a mi elemento div.
  2. vincule la variable myEnabled a la expresión de la derecha. La expresión dice true , por lo que el valor de myEnabled es true.
  3. vincule la variable myText a la expresión de la derecha. La expresión dice abc . ¿Hay algún abc definido? No, entonces la expresión se evaluó como indefinida.
over 4 years ago · Santiago Trujillo Report

0

Los corchetes le dicen a Angular que evalúe la expresión de la plantilla. Si omite los corchetes, Angular trata la cadena como una constante e inicializa la propiedad de destino con esa cadena. ¡No evalúa la cadena!

No cometas el siguiente error:

 <!-- ERROR: HeroDetailComponent.hero expects a Hero object, not the string "currentHero" --> <hero-detail hero="currentHero"></hero-detail>

comprobar: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#property-binding

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!