NativeScript - Data Binding

A vinculação de dados é um dos conceitos avançados suportados pelo NativeScript. NativeScript segue o conceito de vinculação de dados Angular o mais próximo possível. A vinculação de dados permite que o componente UI mostre / atualize o valor atual do modelo de dados do aplicativo sem nenhum esforço de programação.

NativeScript oferece suporte a dois tipos de vinculação de dados. Eles são os seguintes -

One-Way data binding - Atualize a IU sempre que o modelo for alterado.

Two-Way data binding- Sincronize a IU e o modelo. Sempre que o modelo é atualizado, a IU é atualizada automaticamente e também sempre que a IU obtém dados do usuário (a IU é atualizada), o modelo será atualizado.

Vamos aprender os dois conceitos desta seção.

Vinculação de dados unilateral

NativeScript fornece uma opção simples para habilitar a vinculação de dados unilateral em um componente de IU. Para habilitar a vinculação de dados unilateral, basta adicionar colchetes na propriedade da IU de destino e, em seguida, atribuir a propriedade do modelo necessária.

Por exemplo, para atualizar o conteúdo de texto de um componente Label, basta alterar o código da IU conforme abaixo -

<Label [text]='this.model.prop' />

Aqui,

this.model.prop refere-se à propriedade do modelo, this.model.

Vamos mudar nosso BlankNgApp para entender a vinculação de dados unilateral.

Passo 1

Adicione um novo modelo, User (src / model / user.ts) da seguinte forma -

export class User { 
   name: string 
}

Passo 2

Abra a IU do nosso componente, src/app/home/home.component.html e atualize o código conforme abaixo -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar>
<GridLayout columns="*" rows="auto, auto, auto"> 
   <Button text="Click here to greet" class="-primary" color='gray' 
      (tap)='onButtonTap($event)' row='1' column='0'>
   </Button> 
   <Label [text]='this.user.name' row='2' column='0' 
      height="50px" textAlignment='center' style='font-size: 16px; 
      font-weight: bold; margin: 0px 32px 0 25px;'>
   </Label> 
</GridLayout>

Aqui,

  • O texto do rótulo é definido como o nome da propriedade do modelo do usuário.

  • O evento de toque de botão é anexado ao método onButtonTap.

etapa 3

Código aberto do componente doméstico, src/app/home/home.component.ts e atualize o código conforme abaixo -

import { Component, OnInit } from "@angular/core"; 
import { User } from "../../model/user" 
@Component({
   selector: "Home", 
   templateUrl: "./home.component.html" 
}) 
export class HomeComponent implements OnInit { 
   public user: User; 
   constructor() {
      // Use the component constructor to inject providers. 
      this.user = new User(); 
      this.user.name = "User1"; 
   }
   ngOnInit(): void { 
      // Init your component properties here. 
   } 
   onButtonTap(args: EventData) { 
      this.user.name = 'User2'; 
   } 
}

Aqui,

  • modelo de usuário é importado

  • O objeto do usuário é criado no construtor do componente

  • O evento onButtonTap é implementado. A implementação de onButtonTap atualiza o objeto Usuário e define o nome da propriedade como Usuário2

Passo 4

Compile e execute o aplicativo e clique no botão para alterar o modelo e ele mudará automaticamente o Label texto.

O estado inicial e final do aplicativo é o seguinte -

Estado inicial

O estado inicial de vinculação de dados unilateral é mostrado abaixo -

Estado Final

O estado final da vinculação de dados unilateral é mostrado abaixo -

Vinculação de dados bidirecional

NativeScript também fornece vinculação de dados bidirecional para funcionalidade avançada. Ele vincula os dados do modelo à IU e também vincula os dados atualizados na IU ao modelo.

Para fazer a vinculação de dados bidirecional, use a propriedade ngModel e coloque-a entre [] e () como abaixo -

<TextField [(ngModel)] = 'this.user.name'></TextField>

Vamos mudar o aplicativo BlankNgApp para entender melhor a vinculação de dados bidirecional.

Passo 1

Importe NativeScriptFormsModule para o HomeModule (src/app/home/home.module.ts) conforme especificado abaixo -

import { NgModule, NO_ERRORS_SCHEMA } from "@angular/core"; 
import { NativeScriptCommonModule } from "nativescript-angular/common"; 
import { HomeRoutingModule } from "./home-routing.module"; 
import { HomeComponent } from "./home.component"; 
import { NativeScriptFormsModule } from "nativescript-angular/forms";
@NgModule({ 
   imports: [ 
      NativeScriptCommonModule, 
      HomeRoutingModule, 
      NativeScriptFormsModule 
   ], 
   declarations: [ 
      HomeComponent 
   ], 
   schemas: [ 
      NO_ERRORS_SCHEMA 
   ]
}) 
export class HomeModule { }

Aqui,

NativeScriptFormsModule permite a vinculação de dados bidirecional. Caso contrário, a vinculação de dados bidirecional não funcionará conforme o esperado.

Passo 2

Altere a IU do componente inicial conforme fornecido abaixo -

<ActionBar> <Label text="Home"></Label></ActionBar> 
<GridLayout columns="*" rows="auto, auto"> 
   <TextField hint="Username" row='0' column='0' color="gray" 
      backgroundColor="lightyellow" height="75px" [(ngModel)]='this.user.name'>
   </TextField> 
   <Label [text]='this.user.name' row='1' column='0' height="50px" 
      textAlignment='center' style='font-size: 16px; font-weight: bold; 
      margin: 0px 32px 0 25px;'>
   </Label> 
</GridLayout>

Aqui,

A propriedade de texto do componente Label é definida com vinculação de dados unilateral. Se o usuário do modelo for atualizado, sua propriedade de texto será atualizada automaticamente.

O componente TextField define o ngModel como this.user.name. Se o usuário do modelo for atualizado, sua propriedade de texto será atualizada automaticamente. Ao mesmo tempo, se o usuário alterar o valor do TextField, o modelo também será atualizado. Se o modelo for atualizado, ele também acionará as alterações nas propriedades de texto do Label. Portanto, se o usuário alterar os dados, eles serão exibidos na propriedade text do Label.

etapa 3

Execute o aplicativo e tente alterar o valor da caixa de texto.

O estado inicial e final do aplicativo será semelhante ao especificado abaixo -

Estado inicial

Two-way data binding – Initial state is given below −

Final State

Two-way data binding – Final state is shown below −