কৌণিক @ ভিউচিল্ড () ত্রুটি: 2 টি আর্গুমেন্ট প্রত্যাশিত, তবে 1 পেয়েছে


249

ভিউচিল্ড চেষ্টা করার সময় আমি ত্রুটিটি পাচ্ছি। ত্রুটিটি হ'ল "'opts' এর পক্ষে একটি যুক্তি সরবরাহ করা হয়নি" "

@ ভিউচিল্ড দুজনেই ত্রুটি দিচ্ছে।

import { Component, OnInit, ElementRef, ViewChild, Output, EventEmitter } from '@angular/core';
import { Ingredient } from 'src/app/shared/ingredient.model';

@Component({
  selector: 'app-shopping-edit',
  templateUrl: './shopping-edit.component.html',
  styleUrls: ['./shopping-edit.component.css']
})
export class ShoppingEditComponent implements OnInit {

@ViewChild('nameInput') nameInputRef: ElementRef;
@ViewChild('amountInput') amountInputRef: ElementRef;
@Output() ingredientAdded = new EventEmitter<Ingredient>();
  constructor() {}

  ngOnInit() {
  }

  onAddItem() {
    const ingName = this.nameInputRef.nativeElement.value;
    const ingAmount = this.amountInputRef.nativeElement.value;
    const newIngredient = new Ingredient(ingName, ingAmount);
    this.ingredientAdded.emit(newIngredient);
  }

}

ts (11,2): ত্রুটি TS2554: প্রত্যাশিত 2 টি আর্গুমেন্ট, তবে 1 পেয়েছে।


11 লাইনে কি?
টনি এনজিও

@ টনিএনগো @ ভিউচিল্ড ('নেমইনপুট') নাম ইনপুটরাফ: এলিমেন্টরফ;
স্ট্যাক ওভারফ্লো

উত্তর:


497

কৌণিক 8 এ, ভিউচিল্ড 2 পরামিতি নেয়

 @ViewChild(ChildDirective, {static: false}) Component

9
আপনি এটি গ্রহণযোগ্য হিসাবে চিহ্নিত করতে পারেন? কৌণিক দস্তাবেজগুলি থেকে: স্থির - পরিবর্তন সনাক্তকরণের আগে ক্যোরির ফলাফলগুলি সমাধান করতে হবে কিনা (যেমন কেবল স্থির ফলাফলগুলি ফেরত পাওয়া যাবে)। যদি এই বিকল্পটি সরবরাহ না করা হয়, তবে সংকলকটি তার ডিফল্ট আচরণে ফিরে যাবে, যা কোয়েরি রেজোলিউশনের সময় নির্ধারণের জন্য ক্যোয়ারির ফলাফলগুলি ব্যবহার করতে হবে। যদি কোনও প্রশ্নের ফলাফল নেস্টেড ভিউয়ের মধ্যে থাকে (উদাঃ * এনজিআইফ), পরিবর্তন সনাক্তকরণ চলার পরে কোয়েরিটি সমাধান করা হবে। অন্যথায়, পরিবর্তন সনাক্তকরণ চালানোর আগে এটি সমাধান করা হবে।
জেনসেন

12
আপনার উত্তরটি যদি তিনি সেরা হিসাবে আপনার উত্তরটি গ্রহণ করতে চান তবে আপনার উত্তরটি যুক্ত করা উচিত
সিথাম

14
দ্রষ্টব্য: আপনার কৌণিক 7 তে যে আচরণ ছিল তা ধরে রাখতে আপনাকে নির্দিষ্ট করতে হবে { static: true }ng updateপ্রয়োজনে স্বয়ংক্রিয়ভাবে এটি করতে আপনাকে সহায়তা করবে। অথবা, আপনি যদি ইতিমধ্যে ng update @angular/core --from 7 --to 8 --migrate-only
কৌনিক

11
যদি এনজিওএনইনাইট চলাকালীন উপাদানটি উপলব্ধ হওয়ার প্রয়োজন হয়, তবে স্থিতিশীল হওয়া দরকার true, তবে এটি আরএসসি হওয়ার পরে অপেক্ষা করতে পারে false, যার অর্থ এটি এনজিএফটারভিউআইএনটি / এনজিএফটারকন্টেন্টিট না হওয়া পর্যন্ত উপলব্ধ হবে না।
আর্মেন ​​জাকারিয়ান

আমি এটা জানতাম না। ধন্যবাদ। :-)
তানজিল

84

কৌণিক 8

কৌণিক 8 এ, ভিউচিল্ডের আরও একটি পরম রয়েছে

@ViewChild('nameInput', {static: false}) component

আপনি এখানে এবং এখানে এটি সম্পর্কে আরও পড়তে পারেন

কৌণিক 9

ইন Angular 9ডিফল্ট মান হয় static: false, তাই PARAM প্রদান যদি না আপনি ব্যবহার করতে চান দরকার নেই{static: true}


আপনি যে নিবন্ধটি লিঙ্ক করেছেন তার একটিতে সেগুলি সিনট্যাক্সের মতো দেখায় @ContentChild('foo', {static: false}) foo !: ElementRef;। উদ্দীপনা চিহ্নটি সম্পর্কে আমি আগ্রহী। এটিও কৌনিক 8 এর সাথে নতুন কিছু?
কনরাড ভিল্টারস্টন

1
@KonradViltersten এই দেখতে stackoverflow.com/a/56950936/2279488
রেজা

26

কৌনিক 8 এ ViewChild2 পরামিতি লাগে:

এটির মতো চেষ্টা করুন:

@ViewChild('nameInput', { static: false }) nameInputRef: ElementRef;

ব্যাখ্যা:

{স্থির: মিথ্যা}

আপনি যদি স্থির মিথ্যা সেট করে থাকেন তবে ngAfterViewInit/ngAfterContentInitকলব্যাক ফাংশনগুলির জন্য যথাযথভাবে দর্শন শুরুর পরে সবসময়ই উপাদানটি আরম্ভ হয়ে যায় ।

{স্থির: সত্য}

আপনি যদি স্থির সত্যটি সেট করে থাকেন তবে দর্শনটি আরম্ভের সময় শুরুতে হবেngOnInit

ডিফল্ট হিসাবে আপনি ব্যবহার করতে পারেন { static: false }। আপনি যদি একটি গতিশীল দর্শন তৈরি করে থাকেন এবং টেম্পলেট রেফারেন্স ভেরিয়েবলটি ব্যবহার করতে চান তবে আপনার ব্যবহার করা উচিত{ static: true}

আরও তথ্যের জন্য, আপনি এই নিবন্ধটি পড়তে পারেন

ওয়ার্কিং ডেমো

ডেমোতে, আমরা টেমপ্লেট রেফারেন্স ভেরিয়েবল ব্যবহার করে একটি ডিভ স্ক্রোল করব।

 @ViewChild("scrollDiv", { static: true }) scrollTo: ElementRef;

সঙ্গে { static: true }, আমরা ব্যবহার করতে পারেন this.scrollTo.nativeElementমধ্যে ngOnInitকিন্তু সঙ্গে { static: false }, this.scrollToহতে হবে undefinedমধ্যে ngOnInit, তাই আমরা শুধুমাত্র মধ্যে অ্যাক্সেস করতে পারেনngAfterViewInit


6

এটি কারণ ভিউ সন্তানের জন্য দুটি যুক্তির প্রয়োজন হয়

@ ভিউচিল্ড ('নেমইনপুট', {স্ট্যাটিক: মিথ্যা,}) নাম ইনপুটআরফ: এলিমেন্টআরফ;

@ ভিউচিল্ড ('পরিমাণে ইনপুট', {স্ট্যাটিক: মিথ্যা,}) পরিমাণ ইনপুটআরফ: এলিমেন্টআরফ;


3

কৌণিক 8 এ, ভিউচিল্ড সর্বদা 2 টি প্যারাম নেয় এবং দ্বিতীয় প্যারামে সর্বদা স্থিতিযুক্ত : সত্য বা স্থির: মিথ্যা

আপনি এটির মতো চেষ্টা করতে পারেন:

@ViewChild('nameInput', {static: false}) component

এছাড়াও, static: falseঅ্যাঙ্গুলার 9 এ ডিফল্ট ফ্যালব্যাক আচরণ হতে চলেছে।

স্থির মিথ্যা / সত্য কী: তাই থাম্বের নিয়ম হিসাবে আপনি নিম্নলিখিতগুলির জন্য যেতে পারেন:

  • { static: true } আপনি যখন এনজিওআইনিটিতে ভিউচিল্ড অ্যাক্সেস করতে চান তখন সেট করতে হবে।

    { static: false }শুধুমাত্র এনজিএফটারভিউআইনিটিতে অ্যাক্সেস করা যায়। আপনার টেমপ্লেটে আপনার উপাদানটিতে যখন কোনও কাঠামোগত নির্দেশনা (যেমন * এনজিআইফ) থাকে তখন আপনি যা করতে চান সেটিও এটি।


1

আইডিইএর মাধ্যমে সমস্ত প্রতিস্থাপনের জন্য রেগেক্স (ওয়েবস্টর্ম দিয়ে পরীক্ষা করা)

অনুসন্ধান: \@ViewChild\('(.*)'\)

প্রতিস্থাপন করুন: \@ViewChild\('$1', \{static: true\}\)


1

আপনার মত ভিউচিল্ডের সাথে দ্বিতীয় যুক্তিটি ব্যবহার করা উচিত:

@ViewChild("eleDiv", { static: false }) someElement: ElementRef;


0

কৌণিক 8 এ, ভিউচিল্ডের আরও একটি পরম রয়েছে

@ ভিউচিল্ড ('নেমইনপুট', {স্ট্যাটিক: ভুয়া}) উপাদান

আমি নীচের মত আমার সমস্যা সমাধান

@ ভিউচিল্ড (ম্যাটসোর্ট, {স্ট্যাটিক: মিথ্যা}) সাজান: ম্যাটসোর্ট;


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