Programim dhe zhvillim, javascript, python, php, html

Si të aksesoni një konstante në një komponent dhe shërbim Angular 2?

Unë kam një skedar konstante constants.ts:

export const C0NST = "constant";

Unë e aksesoj atë në një shërbim some.service.ts si ky:

import { C0NST } from './constants';

console.log(C0NST); // "constant"

Megjithatë, kur e aksesoj atë në një shabllon përbërësi:

some.component.ts:

import { C0NST } from './constants';

some.component.html:

{{ C0NST }} <!-- Outputs nothing -->

Sidoqoftë, përcaktimi i një anëtari në klasën e komponentëve funksionon:

some.component.ts

public const constant = C0NST;

some.component.html

{{ constant }} <!-- constant -->

Nuk e kuptoj pse arrita të aksesoja konstanten e importuar drejtpërdrejt në klasën e shërbimit, por jo në shabllonin e komponentit, edhe pse e importova atë në klasën e komponentëve.

25.10.2016

Përgjigjet:


1

Në Angular2, shablloni mund të aksesojë vetëm fushat dhe metodat e klasës së komponentit. Çdo gjë tjetër është jashtë kufijve. Kjo përfshin gjërat që janë të dukshme për klasën e komponentëve.

Mënyra për ta rrethuar këtë është që të keni një fushë brenda komponentit, e cila thjesht i referohet konstantës dhe ta përdorni atë në vend të kësaj.


Është një kufizim i dizajnit, por mbase duhet të mendoni më shumë se përse keni nevojë për një konstante në shabllon në radhë të parë. Zakonisht këto gjëra përdoren nga vetë komponentët ose shërbimet, por jo nga shablloni.

25.10.2016
  • Faleminderit Horia. Unë kam një listë të URL-ve GIF që më duhet të marr nga Giphy, kështu që po i ruaj URL-të në skedarin e konstantave. Unë synoj t'i përdor këto në të gjithë aplikacionin nëpër komponentë. Cila është mënyra më e mirë sipas jush? 25.10.2016
  • @KabirRoy Kjo tingëllon si një gjë e mirë për të bërë në fakt. Nëse keni një numër relativisht të vogël imazhesh, në fakt mund të krijoni komponentë për to dhe të përdorni URL-në giphy direkt në burim (siç do të bënit për një aktiv të ofruar nga aplikacioni juaj). Por kjo tingëllon si një qasje e mirë, pavarësisht. 25.10.2016

  • 2

    Meqenëse në shabllonin e Komponentit mund të përdorni vetëm atribute të klasës së Komponentit, nuk mund të përdorni drejtpërdrejt ndonjë konstante të jashtme (ose ndryshore të jashtme).

    Mënyra më elegante që kam gjetur deri tani është kjo:

    import { MY_CONSTANT } from '../constants';
    
    @Component({
      // ...
    })
    export class MyTestComponent implements OnInit {
    
      readonly MY_CONSTANT = MY_CONSTANT;
    
      // ...
    }
    

    i cili në thelb thjesht krijon një atribut të ri MY_CONSTANT brenda klasës së komponentit. Duke përdorur readonly ne sigurohemi që atributi i ri nuk mund të modifikohet.

    Duke bërë këtë, në shabllonin tuaj tani mund të përdorni:

    {{ MY_CONSTANT }}
    
    05.12.2017
  • Kjo është përgjigjja e saktë, por duhet të shtoni static për të shmangur ricaktimin në konstruktor. Pra, duhet të jetë me të vërtetë: readonly myConstant = MY_CONSTANT; Ju lutemi, vini re gjithashtu rekomandimet e udhëzuesit të stilit për sintaksë konstante. 29.10.2018

  • 3

    Shtrirja e lidhjeve të shabllonit Angular2 është shembulli i komponentit. Vetëm ajo që është e arritshme atje mund të përdoret në lidhje.

    Mund ta vini në dispozicion si

    class MyComponent {
      myConst = CONST;
    }
    
    {{myConst}}
    
    25.10.2016
  • Ndonjë dobësi për këtë? Unë jam duke menduar se nëse I CONST është një numër dhe zbulimi i ndryshimit është Push, nuk duhet të ketë asnjë. 28.06.2018
  • @bhantol Unë nuk mendoj se ka anët negative. 28.06.2018
  • Kjo nuk është një konstante. myConst mund të ricaktohet. 29.10.2018
  • @mrgoos CONST është konstante. Nuk mund të qasesh drejtpërdrejt në vlerat e konstitit në lidhjet Angular (të paktën jo në kohën kur postova këtë përgjigje - jo e përditësuar me zhvillimin Angular) 29.10.2018
  • @GünterZöchbauer- është konstante por myConst jo. Mund të modifikohet në klasën MyComponent. 01.11.2018
  • Unë e di këtë, por në këtë mënyrë ju mund të jepni vlerën e konstantës. Ju gjithashtu mund të përdorni një marrës nëse ju shqetëson që vlera mund të modifikohet. 01.11.2018
  • Po, duhet të shqetësojë pasi rezultati përfundimtar është se nuk është një kosto e vërtetë. Ka një mënyrë për të përdorur një konst real dhe është përmendur nga @Shin më poshtë. 03.11.2018
  • Si mund ta përdorim tubin si indeks të grupit, ndonjë ide? 08.03.2019

  • 4

    Ka dy drejtime më të mira për mendimin tim:

    Mbështjellja e konstantave si veti e komponentit të brendshëm

    enum.ts

    export enum stateEnum {
      'DOING' = 0,
      'DONE',
      'FAILED'
    }
    

    component.ts

    import { stateEnum  } from './enum'
    export class EnumUserClass {
      readonly stateEnum : typeof stateEnum = stateEnum ;    
    }
    

    Shembulli përdor enum, por kjo mund të jetë çdo lloj konstante e përcaktuar. Operatori typeof ju jep të gjitha përfitimet e veçorive të shtypjes TypeScript. Atëherë mund ta përdorni këtë variabël direkt në shabllone:

    component.html

    <p>{{stateEnum.DOING}}<p>
    

    Kjo zgjidhje është më pak efikase në kontekstin e përdorimit të memories, sepse në thelb po kopjoni të dhëna (ose referenca ndaj konstanteve) në çdo komponent që dëshironi ta përdorni. Përveç kësaj, sintaksa
    readonly constData: typeof constData = constData
    për mendimin tim prezanton shumë zhurmë sintaksore dhe mund të jetë konfuze për të sapoardhurit

    Mbështjellja e konstantës së jashtme në funksionin e komponentit

    Opsioni i dytë është të mbështillni variablin/konstantën tuaj të jashtme me funksionin e komponentit dhe ta përdorni atë funksion në shabllon:

    enum.ts

    export enum stateEnum {
      'DOING' = 0,
      'DONE',
      'FAILED'
    }
    

    component.ts

    import { stateEnum  } from './enum'
    export class EnumUserClass {
      getEnumString(idx) {
        return stateEnum[stateEnum[idx]];
      }   
    }
    

    component.html

    <p>{{getEnumString(1)}}</p>  
    

    Gjë e mirë është që të dhënat nuk dublikohen në kontrollues, por ndodhin dobësi të tjera të mëdha. Sipas ekipit Angular, përdorimi i funksioneve në shabllone nuk rekomandohet për shkak të mekanizmit të zbulimit të ndryshimeve, i cili funksionon shumë më pak efikas në rastin e funksioneve që kthejnë vlera në shabllone: ​​zbulimi i ndryshimit nuk e ka idenë nëse kthimi i vlerës nga një funksion ka ndryshuar, kështu që do të të thirret shumë shpesh sesa duhet (dhe duke supozuar se po ktheni const prej tij, në fakt nevojitet vetëm një herë, kur plotësoni pamjen e shabllonit. Mund të jetë paksa e efektshmërisë për aplikimin tuaj (nëse jeni me fat) ose mund ta prishë plotësisht atë nëse funksioni zgjidhet me Observable për shembull, dhe ju përdorni tubin async për t'u abonuar në rezultatet, mund t'i referoheni artikullit tim të shkurtër mbi atë rel=">rel"

    25.05.2018

    5

    Ju mund të krijoni një BaseComponent, është një vend ku duhet të krijoni instancat tuaja konstante dhe më pas mund të krijoni BaseComponent-in tuaj të zgjerimit të FooComponent dhe mund të përdorni konstantet tuaja.

    20.03.2017
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..