এইচটিএমএলের মধ্যে টাইপস্ক্রিপ্ট এনামের কাছে যেতে পারে না


87

আমি মাই সার্ভিস.সার্ভিস.স মাইকম্পোনমেন্ট.কম্পোনেন্ট.টিস এবং মাই কমম্পোনেন্ট.কম্পোনেন্ট.এইচটিএমএলে টাইপস্ক্রিপ্ট সহ একটি এনাম তৈরি করেছি।

export enum ConnectionResult {
    Success,
    Failed     
}

আমি মাই সার্ভিস.সার্ভিস.সেটস থেকে সহজেই একটি সংজ্ঞায়িত এনাম ভেরিয়েবলটি পেতে এবং তুলনা করতে পারি:

this.result = this.myService.getConnectionResult();

switch(this.result)  
{
    case ConnectionResult.Failed:
         doSomething();
         break;
    case ConnectionResult.Success:
         doSomething();
         break;
}

আমি আমার এইচটিএমএল এর মধ্যে * ngIf বিবৃতিটি ব্যবহার করে তুলনা করার জন্য এনামটিও ব্যবহার করতে চেয়েছিলাম:

<div *ngIf="result == ConnectionResult.Success; else failed">
            <img src="../../assets/connection-success.png" height="300px" class="image-sign-style" />
</div>
<ng-template #failed>
       <img src="../../assets/connection-failed.png" height="300px" class="image-sign-style" />
</ng-template>

কোডটি সংকলন করে তবে ব্রাউজারটি আমাকে একটি ত্রুটি দেয়:

অপরিশোধিত সম্পত্তি পড়তে পারে না

এখানে চিত্র বর্ণনা লিখুন

নিম্নলিখিত এইচটিএমএল ইঙ্গিতটি ত্রুটিরেখার সাথে:

এখানে চিত্র বর্ণনা লিখুন

কেউ কি জানেন যে এনামের কাছে কেন এইভাবে যোগাযোগ করা যায় না?

উত্তর:


157

টেমপ্লেটের সুযোগটি উপাদান উপাদান সদস্যদের মধ্যে সীমাবদ্ধ। আপনি যদি কিছু উল্লেখ করতে চান তবে এটি সেখানে উপলব্ধ হওয়া দরকার

class MyComponent {
  public get connectionResult(): typeof ConnectionResult {
    return ConnectionResult; 
  }
}

এইচটিএমএল এ আপনি এখন ব্যবহার করতে পারেন

*ngIf="connectionResult.Success"

এইচটিএমএল টেমপ্লেট থেকে Angular2 অ্যাক্সেস গ্লোবাল ভেরিয়েবলগুলি দেখুন See


4
যেহেতু আমি কোডিং মানগুলি কঠোরভাবে অনুসরণ করছি, কোন তথ্য টাইপ, আমি সংযোগের জন্য দিতে হবে ফলাফল
নসরুল ভারতী

আমি জানি না। আমি কেবল প্লানকারে টাইপস্ক্রিপ্ট ব্যবহার করেছি এবং কোনও ধরণের চেক নেই। আমি প্রত্যাশা করব ত্রুটি বার্তাটি আপনাকে প্রত্যাশিত প্রকারটি বলবে যখন আপনি কোনও বেমানান ব্যবহার করেন, তাই না?
গন্টার জ্যাচবাউয়ার

ধন্যবাদ, আমাকে স্ট্যাক ওভারফ্লোতে একটি নতুন কথোপকথনটি শুরু করতে দিন
নসরুল ভারতী

4
হ্যাঁ, কেবল একজন সরল সম্পত্তি সদস্য আমার পক্ষে কাজ করেনি, তবে এটিকে কাজ হিসাবে কাজ হিসাবে সেট করে।
কন

4
অন্যান্য নাম হিসাবে আপনি নাম রাখতে পারেন না। (অন্যান্য সমস্যাগুলি তৈরি করতে পারে তবে আমি এখনও আবিষ্কার করি নি)
লসম্যানোস

51

আপনাকে .tsফাইলটিতে নিম্নলিখিত পদ্ধতিতে লিখতে হবে ।

enum Tenure { day, week, all }

export class AppComponent {
    tenure = Tenure.day
    TenureType = Tenure
}

এবং এখন এইচটিএমএল এ আপনি এটি ব্যবহার করতে পারেন

*ngIf = "tenure == TenureType.day ? selectedStyle : unSelectedStyle"

আমি আশা করি এটি এখন আরও পরিষ্কার হয়ে গেছে। :)


4
টেনিউরটাইপ এবং টেনিউয়ারের মধ্যে '=' এবং না ':' ব্যবহার করতে ভুলবেন না, অর্থাৎ টাইপটি এটি সংজ্ঞায়িত করবেন না বলে নির্ধারণ করুন। @ নিখিল যা লিখেছেন তা উপেক্ষা করেই আমি এই ভুলটি করেছি। +1
জ্যাকস

28

আপনি সম্পত্তি হিসাবে আপনার উপাদানটিতে কেবল এনাম যুক্ত করতে পারেন এবং আপনার টেম্পলেটগুলিতে এনামের একই নাম (কোয়ার্টার) ব্যবহার করতে পারেন :

enum Quarters{ Q1, Q2, Q3, Q4}

export class AppComponent {
   quarter = Quarters.Q1
   Quarters = Quarters
}

আপনার টেম্পলেট মধ্যে

<div *ngIf="quarter == Quarters.Q1">I=am only visible for Q1</div> 

এই কাজ করার কারণটি হ'ল নতুন পার্পার্টিটি মূলত এই ধরণের:

TileType: typeof TileType

আপনি যদি এনামের নাম আউটপুট করতে চান তবে যেমন এন divবা mat-iconআপনাকে এনাম উল্লেখ করতে হবে, এবং আইটেমটি সরাসরি নয়। ব্যাখ্যা করার চেয়ে দেখানো সহজ:<mat-icon svgIcon="{{Quarters[Quarters.Q1]}}"></mat-icon>
লসম্যানোস

এটি অবশ্যই সবচেয়ে পরিষ্কার উপায়
d3vtoolsmith

0

নীচে হিসাবে এনাম হিসাবে সংজ্ঞায়িত করা হলে আপনি পাঠ্য হিসাবে আবদ্ধ করতে পারেন (এই মানগুলি API থেকে আগত কোনও জসন স্ট্রিং মান প্রয়োগ করবে না)

  export enum SomeEnum {
      Failure,
      Success,
  }

.Ts ফাইলে

public status: SomeEnum;

ইন .html

<div *ngIf="status == 'Success'">

আরও একটি উপায়, কৌনিক 8+ তে পরীক্ষা করা হচ্ছে সংখ্যা সহ এনাম থাকা

  export enum SomeEnum {
      Failure = 0,
      Success = 1,
  }

.Ts ফাইলে

public status: SomeEnum;

ইন .html

<div *ngIf="status == 1">


আমি বিশ্বাস করি যে সমস্ত এনামগুলি স্বয়ংক্রিয়ভাবে সংখ্যার সাথে আসে
সুপার আইটি লোক

আপনি যা চান তা আপনি বিশ্বাস করতে পারেন তবে আমি এটি পরীক্ষা করেছি এবং এভাবে 2 পন্থা সরবরাহ করেছি। সুতরাং না, আপনি যদি একটি নম্বর নির্দিষ্ট না করেন তবে এটি সি # এর মতো সংখ্যার সাথে আসে না। এই আচরণটি টাইপস্ক্রিপ্ট সংস্করণের সাথে সম্পর্কিত হতে পারে (+ সম্ভবত কৌণিক ফ্র্যাক্স সংস্করণ)
পাভেল সিওচ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.