উপাদান হিসাবে কৌণিক 2 টেবিল সারি


103

আমি কৌণিক ২.০.০-বিটা.0 নিয়ে পরীক্ষা নিরীক্ষা করছি

আমার একটি টেবিল রয়েছে এবং লাইন সামগ্রীটি এইভাবে কৌণিক 2 দ্বারা উত্পন্ন হয়:

    <table>
        <tr *ngFor="#line of data">
            .... content ....
        </tr>
    </table>

এখন এটি কাজ করে এবং আমি সামগ্রীটিকে "টেবিল-লাইন" উপাদানগুলিতে আবদ্ধ করতে চাই।

    <table>
        <table-line *ngFor="#line of data" [data]="line">
        </table-line>
    </table>

এবং উপাদানটিতে, টেমপ্লেটে <tr> <td> সামগ্রী রয়েছে।

তবে এখন টেবিলটি আর কাজ করে না। যার অর্থ, সামগ্রীটি আর কলামগুলিতে প্রদর্শিত হবে না। ব্রাউজারে, পরিদর্শক আমাকে দেখায় যে ডোম উপাদানগুলি দেখতে দেখতে:

    <table>
        <table-line ...>
            <tbody>
                <tr> ....

আমি এই কাজটি কীভাবে করব?

উত্তর:


114

নির্বাচক হিসাবে বিদ্যমান টেবিল উপাদান ব্যবহার করুন

সারণী উপাদান <table-line>উপাদানগুলিকে শিশু হিসাবে মঞ্জুরি দেয় না এবং ব্রাউজারগুলি যখন তাদের সন্ধান করে কেবল তখন তাদের সরিয়ে দেয়। আপনি এটিকে কোনও উপাদানগুলিতে মুড়িয়ে রাখতে পারেন এবং অনুমোদিত <tr>ট্যাগটি এখনও ব্যবহার করতে পারেন । কেবল "tr"নির্বাচক হিসাবে ব্যবহার করুন ।

ব্যবহার <template>

<template>পাশাপাশি অনুমতি দেওয়া উচিত তবে সমস্ত ব্রাউজারে এখনও কাজ করে না। অ্যাঙ্গুলার 2 আসলে কখনই ডিওমে কোনও <template>উপাদান যুক্ত করে না, তবে কেবল সেগুলি অভ্যন্তরীণভাবে প্রক্রিয়াজাত করে, সুতরাং এটি অ্যাঙ্গুলার 2 সহ সমস্ত ব্রাউজারেও ব্যবহার করা যেতে পারে।

বৈশিষ্ট্য নির্বাচক

আর একটি উপায় বৈশিষ্ট্য নির্বাচনকারীদের ব্যবহার করা select

@Component({
  selector: '[my-tr]',
  ...
})

মত ব্যবহার করা

<tr my-tr>

সুতরাং আমি আমার নির্বাচক = 'টিআর' দিয়ে আমার টেবিল আইটেম কম্পোনেন্টটি তৈরি করব। তবে কীভাবে অন্যান্য সমস্যার জন্য 'ট্র' ব্যবহার করতে পারেন?
fbenoit

6
যদি প্যারেন্ট উপাদানটি আপনার কাস্টম trট্যাগ অন্তর্ভুক্ত করে তবে এটি ব্যবহার করা হবে, অন্যথায় এটি ডিফল্ট ব্রাউজার আচরণ ঘটে। আপনি পছন্দ করতে আপনার উপাদান নির্বাচক থেকে বৈশিষ্ট্যাবলী বা শ্রেণীর যোগ করতে পারেন <tr line-item>একটি উপাদান নির্বাচক সঙ্গে "tr[line-item] "বা <tr class="line-item">কম্পোনেন্ট নির্বাচক সঙ্গে tr.line-item। এইভাবে আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে। এঙ্গুলার 2 এ আমি এখনও এগুলির কোনও চেষ্টা করি নি, তবে আমি নিশ্চিত যে এটি কাজ করে।
গন্টার জ্যাচবাউয়ার

5
এটির মধ্যে কোনও বাস্তব ত্রুটি আছে কি? এটি সূক্ষ্মভাবে কাজ করে, তবে এর বিপরীতে প্রস্তাবিত স্টাইলtslint গাইডটিতে আমাকে নির্দেশ দেওয়ার জন্য ডিফল্ট সেটিংস । আমি বন্ধ করে রাখলে অপছন্দ নিয়ম linting সুপারিশ কিন্তু যতদূর আমি বলতে পারেন, এটা (যেমন ওপি এর সমস্যা) একটি মোটামুটি ইচ্ছামত শৈলী শাসন ও কিছু পরিস্থিতিতে অনিবার্য বলে মনে হয়
রব

4
আমি নিশ্চিত যে এর মধ্যে কোনও ত্রুটি নেই, বাদে এই উপাদান নির্বাচনকারীরা আরও সাধারণ এবং তাই ডিফল্ট হওয়া উচিত। যদি টেবিল উপাদান বা এর মতো বৈধ কেস থাকে তবে <li>এটি ব্যবহার না করার কোনও কারণ আমি দেখতে পাচ্ছি না।
গন্টার জ্যাচবাউয়ার

4
আমার উপাদান নির্বাচনকারীকে টিআর [লাইন-আইটেম] ব্যবহার করে তৈরি করা এবং কৌণিক স্টাইল গাইড নিয়ম স্টাইল 05-03 এর সাথে মেনে চলে যে tslint এর বিরুদ্ধে অভিযোগ করে।
সিএম

32

উদাহরণটি আমি খুব উপকারী বলেছি কিন্তু এটি 2,2.3 বিল্ডে কাজ করে নি, তাই অনেক মাথা স্ক্র্যাচিংয়ের পরে এটি কয়েকটি ছোট পরিবর্তন করে আবার কাজ করেছে।

import {Component, Input} from '@angular/core'

@Component({
  selector: "[my-tr]",
  template: `<td *ngFor='let item of row'>{{item}}</td>`    
})
export class MyTrComponent {
  @Input("line") row:any;
}

@Component({
  selector: "my-app",
  template: `<h1>{{title}}</h1>
  <table>
    <tr  *ngFor="let line of data" my-tr [line]="line"></tr>
  </table>`

})
export class AppComponent {

  title = "Angular 2 - tr attribute selector!";
  data = [ [1,2,3], [11, 12, 13] ];
  constructor() { console.clear(); }
}

4
দুর্দান্ত উত্তর। আমি ঠিক যোগ MyTrComponentকরতে হবে app.module.tsএবং কাজ করে।
টিটো লেভা

26

কোনও অ্যাট্রিবিউট সিলেক্টরের সাথে একটি উপাদান ব্যবহার করার জন্য এখানে একটি উদাহরণ রয়েছে:

import {Component, Input} from '@angular/core';
@Component({
  selector: '[myTr]',
  template: `<td *ngFor="let item of row">{{item}}</td>`
})
export class MyTrComponent {
  @Input('myTr') row;
}
@Component({
  selector: 'my-app',
  template: `{{title}}
  <table>
    <tr *ngFor="let line of data" [myTr]="line"></tr>
  </table>
  `
})
export class AppComponent {
  title = "Angular 2 - tr attribute selector";
  data = [ [1,2,3], [11, 12, 13] ];
}

আউটপুট:

1   2   3
11  12  13

অবশ্যই মাইটিআরকমম্পোনেন্টে টেম্পলেটটি আরও জড়িত হবে, তবে আপনি ধারণাটি পাবেন।

পুরাতন (বিটা.0) প্লঙ্কার


মূল ট্যাগ ছাড়াই এনজি উপাদান রেন্ডার করা সম্ভব? নকআউট.জেএস এ <! - / কো -> এর মতো কিছু।
এসএসএস


14
এটি মোটেই কাজ করে না (কৌনিক ২.৩ দিয়ে চেষ্টা করা হয়েছে)। ত্রুটি নিক্ষেপ:Error: Uncaught (in promise): Error: Template parse errors: Can't bind to 'myTr' since it isn't a known property of 'tr'.
ভুকাসিন

এটিকে কাজ করতে আপনাকে সিলেক্টারে [] যুক্ত করতে হবে। ভুলে যাবেন না
এফটিটার

7

উপাদান শৈলীতে 'প্রদর্শন: সামগ্রী' যুক্ত করা আমার পক্ষে কাজ করেছে।

সিএসএস:

.table-line {
    display: contents;
}

এইচটিএমএল:

<table>
    <table-line class="table-line" [data]="line">
    </table-line>
</table>

কেন এই কাজ করে?

কোনও উপাদান ইনস্ট্যান্স করার সময়, কৌণিক (সংকলনের পরে) ডিওমে থাকা উপাদানটির বিষয়বস্তু নিম্নরূপে জড়িয়ে দেয়:

<table>
    <table-line>
        <tr></tr>
    </table-line>
</table>

টেবিলটি সঠিকভাবে প্রদর্শনের জন্য, trট্যাগগুলি কোনও কিছু দিয়ে মোড়ানো যায় না।

সুতরাং, আমরা display: contentsএই নতুন উপাদান যোগ করুন । আমি যেমন বুঝতে পেরেছি, এটি কী করে তা এক্সপ্লোরারকে এই ট্যাগটি রেন্ডার করা উচিত নয় এবং অভ্যন্তরীণ সামগ্রীটি এমনভাবে প্রদর্শন করা উচিত যেন কোনও মোড়ক নেই। সুতরাং, ট্যাগটি এখনও বিদ্যমান থাকলেও এটি টেবিলে চাক্ষুষভাবে প্রভাবিত করে না এবং trট্যাগগুলি এমনভাবে বিবেচনা করা হয় যেন তারা tableট্যাগের সরাসরি শিশু ।

আপনি কীভাবে বিষয়বস্তুগুলি কাজ করে সে সম্পর্কে আরও তদন্ত করতে চাইলে: https://bitofco.de/how-display-contents-works/


4
সম্ভব হলে, কেবল কোডের পরিবর্তে অতিরিক্ত ব্যাখ্যা দেওয়ার জন্য চেষ্টা করুন make এগুলির উত্তরগুলি আরও কার্যকর হতে পারে কারণ তারা সম্প্রদায়ের সদস্যদের এবং বিশেষত নতুন বিকাশকারীদের সমাধানের যুক্তি আরও ভালভাবে বুঝতে সহায়তা করে এবং ফলো-আপ প্রশ্নগুলির সমাধানের প্রয়োজনীয়তা রোধ করতে সহায়তা করে।
রাজন

হাই @ রাজান, টিপটির জন্য ধন্যবাদ। আমি কীভাবে contentsকাজ করে তা আবিষ্কার করেছি , সুতরাং আমি মিথ্যা অনুমানের উপর ভিত্তি করে তথ্য রাখতে চাইনি ... আমি বুঝতে পেরে ব্যাখ্যাটি যুক্ত করেছিলাম, তবে যদি কেউ লক্ষ্য করে যে এতে কোনও ত্রুটি রয়েছে তবে দয়া করে এটিকে চিহ্নিত করতে নির্দ্বিধায় অনুভব করুন ^ । আমি আরও একটি লিঙ্ক যুক্ত করেছি যাতে লোকেরা আরও তদন্ত করতে পারে ... একটি জিনিস আমি লক্ষ্য করেছি, যদিও এটি বলছে যে এটি আইই ১১-তে কাজ করে না, আমি এটি ১১..6.67.১836262২.০ এ চেষ্টা করেছিলাম এবং এটি ভাল কাজ করেছে (তবে, যেহেতু আমি আছি কৌণিক ব্যবহার করে, কোথাও একটি পলিফিল থাকতে পারে, তাই আমি অন্যান্য পরিবেশে এটির 100% গ্যারান্টি দিই না)
রুবেন নেগ্রেডো

খুব ভাল উত্তর। আইএমও এটি গ্রহণ করা উচিত।
অ্যাডামসফ্যামিলি

-3

এটা চেষ্টা কর

@Component({
    selecctor: 'parent-selector',
    template: '<table><body><tra></tra></body></table>'
    styles: 'tra{ display:table-row; box-sizing:inherit; }'
})
export class ParentComponent{
}

@Component({
    selecctor: 'parent-selector',
    template: '<td>Name</td>Date<td></td><td>Stackoverflow</td>'
})
export class ChildComponent{}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.