document.getElementBy Angular4 / typcript এ প্রতিস্থাপন?


94

সুতরাং, আমি আমার অনুশীলনের কাজে কৌনিক 4 নিয়ে কাজ করছি এবং এটি আমার জন্য নতুন। Luckyly পেতে HTML উপাদানগুলি এবং তার মান আমি ব্যবহার করতাম জন্য, <HTMLInputElement> document.getElementByIdবা <HTMLSelectElement> document.getElementById

আমি ভাবছি কৌণিক ক্ষেত্রে এর কোনও প্রতিস্থাপন আছে কিনা


4
GetElementById ব্যবহার করবেন না কেন?
সুরেন Srapyan

এটি ভাবতে ভাবতে উপাদানগুলি পাওয়ার একটি কৌনিক উপায় রয়েছে।
নিনো গুতেরেস

উত্তর:


149

আপনি আপনার ডোম উপাদানটি ব্যবহার করে ট্যাগ করতে পারেন #someTag, তারপরে এটি পান @ViewChild('someTag')

সম্পূর্ণ উদাহরণ দেখুন:

import {AfterViewInit, Component, ElementRef, ViewChild} from '@angular/core';

@Component({
    selector: 'app',
    template: `
        <div #myDiv>Some text</div>
    `,
})
export class AppComponent implements AfterViewInit {
    @ViewChild('myDiv') myDiv: ElementRef;

    ngAfterViewInit() {
        console.log(this.myDiv.nativeElement.innerHTML);
    }
}

console.logকিছু পাঠ্য মুদ্রণ করবে ।


ত্রুটি দেখায় ত্রুটি: '@ কৌণিক / কোর / এসসিআর / মেটাডেটা / ডি'র সমাধান করতে পারে না' ত্রুটি: সমাধান করতে পারে না '@ কৌণিক / কোর / এসসিআর / লিঙ্কার / এলিমেন্ট_রেফ'
নিনো

4
এনভিএম, এর মতো আমদানি করে সমাধান করা। '@ কৌণিক / কোর' থেকে import উপাদান, অননিট, ভিউচিল্ড, এলিমেন্টআরফ import আমদানি করুন;
নিনো গুতেরেস

20
আপনার যদি * এনজিফোর্ড, * এনজিআইএফ ইত্যাদির মতো শর্তযুক্ত ডোম উপাদান থাকে তবে এটি কাজ করবে না
রবীন্দ্র

কৌণিক 8+ এর জন্য ভিউচিল্ড ডেকোরেটরের কাছে দুটি যুক্তি প্রয়োজন requires

শর্তটি সত্য হলে আমি কীভাবে #myDiv যুক্ত করতে পারি? উদাহরণস্বরূপ: আইডি দিয়ে আমি [আইডি] করতে পারি = "আইজুল? 'মাইডিভ': '' Thanks ধন্যবাদ
daniel8x

77

আপনি কেবল কনস্ট্রাক্টরের মধ্যে ডকুমেন্ট টোকেন ইনজেক্ট করতে পারেন এবং এটিতে একই ফাংশন ব্যবহার করতে পারেন

import { Inject }  from '@angular/core';
import { DOCUMENT } from '@angular/common'; 

@Component({...})
export class AppCmp {
   constructor(@Inject(DOCUMENT) document) {
      document.getElementById('el');
   }
}

বা যদি আপনি যে উপাদানটি পেতে চান তা সেই উপাদানটিতে থাকে তবে আপনি টেম্পলেট রেফারেন্স ব্যবহার করতে পারেন ।


আমার কেন নথির অবজেক্টটি ইনজেক্ট করা উচিত এবং জাভাস্ক্রিপ্ট দ্বারা সরবরাহ করা সরাসরি ব্যবহার করা উচিত নয়?
ডেভিড

@ ডেভিড আমরা কৌণিক ব্যবস্থার উপর নির্ভর করি। পরে তারা খুব ভাল জিনিস বাস্তবায়ন করতে পারে এবং তাদের বাস্তবায়নে কিছু পরীক্ষা করতে পারে। সুতরাং আমরা কেবল এখানে বিমূর্তির উপর নির্ভর করি
সুরেন Srapyan

24

কৌণিক 8 বা উত্তরের জন্য @ ভিউচিল্ডের অপটস নামে একটি অতিরিক্ত প্যারামিটার রয়েছে , যার দুটি বৈশিষ্ট্য রয়েছে: পড়ুন এবং স্থিতিশীল, পঠন is চ্ছিক । আপনি এটি এর মতো ব্যবহার করতে পারেন:

// ...
@ViewChild('mydiv', { static: false }) public mydiv: ElementRef;

constructor() {
// ...
<div #mydiv></div>

দ্রষ্টব্য: স্থায়ী: মিথ্যা 9 টি আর কৌণিক 9 এ আর দরকার নেই (ঠিক { static: true }যখন আপনি এনজিওনইনাইটের মধ্যে সেই পরিবর্তনশীলটি ব্যবহার করতে যাচ্ছেন)


4
আপনি যখন উপাদানকে ব্যবহার করে গতিশীলভাবে লুকান বা দেখান তখন এটি কাজ করে *ngIf। আপনি কীভাবে উপাদান তৈরি করছেন?
গুস্তাভো সান্তমারিয়া

8

এটা চেষ্টা কর:

টাইপস্ক্রিপ্ট ফাইল কোড:

(<এইচটিএমএল ইনপুট এলিমেটমেন্ট> ডকুমেন্ট.গেট এলিমেন্টবাইআইডি ("নাম")) মান

এইচটিএমএল কোড:

 <ইনপুট আইডি = "নাম" টাইপ = "পাঠ্য" # নাম /> 

7
  element: HTMLElement;

  constructor() {}

  fakeClick(){
    this.element = document.getElementById('ButtonX') as HTMLElement;
    this.element.click();
  }

4
এটি অত্যন্ত অনিরাপদ (কৌণিক ইউনিভার্সালটিতে এই কমান্ডটি চালানো ক্র্যাশের কারণ হয়ে দাঁড়িয়েছে) এবং অন্য কোনও বিকল্প যদি সম্ভব না হয় তবেই এটি ব্যবহার করা উচিত (এছাড়াও উপাদানটি উপস্থিত নাও থাকতে পারে বিবেচনা করুন)
জুনিরাস

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