Angular 2
निर्देशों
खोज…
वाक्य - विन्यास
<input [value]="value">
- Binds विशेषता मान वर्ग सदस्यname
।<div [attr.data-note]="note">
- बाइंडर्स विशेषताdata-note
टू वैरिएबलnote
।<p green></p>
- कस्टम निर्देश
टिप्पणियों
कोणीय 2 निर्देशों के बारे में जानकारी का मुख्य स्रोत आधिकारिक दस्तावेज है https://angular.io/docs/ts/latest/guide/attribute-directives.html
निर्देश देना
<div [class.active]="isActive"></div>
<span [style.color]="'red'"></span>
<p [attr.data-note]="'This is value for data-note attribute'">A lot of text here</p>
घटक टेम्पलेट के साथ एक निर्देश है
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<h1>Angular 2 App</h1>
<p>Component is directive with template</p>
`
})
export class AppComponent {
}
संरचनात्मक निर्देश
<div *ngFor="let item of items">{{ item.description }}</div>
<span *ngIf="isVisible"></span>
कस्टम निर्देश
import {Directive, ElementRef, Renderer} from '@angular/core';
@Directive({
selector: '[green]',
})
class GreenDirective {
constructor(private _elementRef: ElementRef,
private _renderer: Renderer) {
_renderer.setElementStyle(_elementRef.nativeElement, 'color', 'green');
}
}
उपयोग:
<p green>A lot of green text here</p>
* ngFor
form1.component.ts:
import { Component } from '@angular/core';
// Defines example component and associated template
@Component({
selector: 'example',
template: `
<div *ngFor="let f of fruit"> {{f}} </div>
<select required>
<option *ngFor="let f of fruit" [value]="f"> {{f}} </option>
</select>
`
})
// Create a class for all functions, objects, and variables
export class ExampleComponent {
// Array of fruit to be iterated by *ngFor
fruit = ['Apples', 'Oranges', 'Bananas', 'Limes', 'Lemons'];
}
आउटपुट:
<div>Apples</div>
<div>Oranges</div>
<div>Bananas</div>
<div>Limes</div>
<div>Lemons</div>
<select required>
<option value="Apples">Apples</option>
<option value="Oranges">Oranges</option>
<option value="Bananas">Bananas</option>
<option value="Limes">Limes</option>
<option value="Lemons">Lemons</option>
</select>
अपने सबसे सरल रूप में, *ngFor
के दो भाग होते हैं: let variableName of object/array
fruit = ['Apples', 'Oranges', 'Bananas', 'Limes', 'Lemons'];
के मामले में fruit = ['Apples', 'Oranges', 'Bananas', 'Limes', 'Lemons'];
,
सेब, संतरे, और इतने पर सरणी fruit
अंदर मूल्य हैं।
[value]="f"
प्रत्येक वर्तमान fruit
( f
) के बराबर होगा जो *ngFor
ने पुनरावृत्त किया है।
AngularJS के विपरीत, Angular2 के उपयोग के साथ जारी रखा नहीं किया है ng-options
के लिए <select>
और ng-repeat
अन्य सभी सामान्य पुनरावृत्ति के लिए।
*ngFor
थोड़े विविध वाक्य विन्यास के साथ ng-repeat
समान है।
संदर्भ:
कोणीय 2 | डेटा प्रदर्शित करना
कोणीय 2 | ngFor
कोणीय 2 | फार्म
क्लिपबोर्ड निर्देश पर कॉपी करें
इस उदाहरण में हम एक तत्व पर क्लिक करके टेक्स्ट को क्लिपबोर्ड में कॉपी करने का निर्देश बनाने जा रहे हैं
कॉपी-text.directive.ts
import { Directive, Input, HostListener } from "@angular/core"; @Directive({ selector: '[text-copy]' }) export class TextCopyDirective { // Parse attribute value into a 'text' variable @Input('text-copy') text:string; constructor() { } // The HostListener will listen to click events and run the below function, the HostListener supports other standard events such as mouseenter, mouseleave etc. @HostListener('click') copyText() { // We need to create a dummy textarea with the text to be copied in the DOM var textArea = document.createElement("textarea"); // Hide the textarea from actually showing textArea.style.position = 'fixed'; textArea.style.top = '-999px'; textArea.style.left = '-999px'; textArea.style.width = '2em'; textArea.style.height = '2em'; textArea.style.padding = '0'; textArea.style.border = 'none'; textArea.style.outline = 'none'; textArea.style.boxShadow = 'none'; textArea.style.background = 'transparent'; // Set the texarea's content to our value defined in our [text-copy] attribute textArea.value = this.text; document.body.appendChild(textArea); // This will select the textarea textArea.select(); try { // Most modern browsers support execCommand('copy'|'cut'|'paste'), if it doesn't it should throw an error var successful = document.execCommand('copy'); var msg = successful ? 'successful' : 'unsuccessful'; // Let the user know the text has been copied, e.g toast, alert etc. console.log(msg); } catch (err) { // Tell the user copying is not supported and give alternative, e.g alert window with the text to copy console.log('unable to copy'); } // Finally we remove the textarea from the DOM document.body.removeChild(textArea); } } export const TEXT_COPY_DIRECTIVES = [TextCopyDirective];
कुछ-page.component.html
अपने घटक के निर्देशों सरणी में TEXT_COPY_DIRECTIVES इंजेक्षन करना याद रखें
... <!-- Insert variable as the attribute's value, let textToBeCopied = 'http://facebook.com/' --> <button [text-copy]="textToBeCopied">Copy URL</button> <button [text-copy]="'https://www.google.com/'">Copy URL</button> ...
एक कस्टम निर्देशन का परीक्षण
एक निर्देश दिया गया है जो माउस घटनाओं पर पाठ को उजागर करता है
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({ selector: '[appHighlight]' })
export class HighlightDirective {
@Input('appHighlight') // tslint:disable-line no-input-rename
highlightColor: string;
constructor(private el: ElementRef) { }
@HostListener('mouseenter')
onMouseEnter() {
this.highlight(this.highlightColor || 'red');
}
@HostListener('mouseleave')
onMouseLeave() {
this.highlight(null);
}
private highlight(color: string) {
this.el.nativeElement.style.backgroundColor = color;
}
}
इसे इस तरह से परखा जा सकता है
import { ComponentFixture, ComponentFixtureAutoDetect, TestBed } from '@angular/core/testing';
import { Component } from '@angular/core';
import { HighlightDirective } from './highlight.directive';
@Component({
selector: 'app-test-container',
template: `
<div>
<span id="red" appHighlight>red text</span>
<span id="green" [appHighlight]="'green'">green text</span>
<span id="no">no color</span>
</div>
`
})
class ContainerComponent { }
const mouseEvents = {
get enter() {
const mouseenter = document.createEvent('MouseEvent');
mouseenter.initEvent('mouseenter', true, true);
return mouseenter;
},
get leave() {
const mouseleave = document.createEvent('MouseEvent');
mouseleave.initEvent('mouseleave', true, true);
return mouseleave;
},
};
describe('HighlightDirective', () => {
let fixture: ComponentFixture<ContainerComponent>;
let container: ContainerComponent;
let element: HTMLElement;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ContainerComponent, HighlightDirective],
providers: [
{ provide: ComponentFixtureAutoDetect, useValue: true },
],
});
fixture = TestBed.createComponent(ContainerComponent);
// fixture.detectChanges(); // without the provider
container = fixture.componentInstance;
element = fixture.nativeElement;
});
it('should set background-color to empty when mouse leaves with directive without arguments', () => {
const targetElement = <HTMLSpanElement>element.querySelector('#red');
targetElement.dispatchEvent(mouseEvents.leave);
expect(targetElement.style.backgroundColor).toEqual('');
});
it('should set background-color to empty when mouse leaves with directive with arguments', () => {
const targetElement = <HTMLSpanElement>element.querySelector('#green');
targetElement.dispatchEvent(mouseEvents.leave);
expect(targetElement.style.backgroundColor).toEqual('');
});
it('should set background-color red with no args passed', () => {
const targetElement = <HTMLSpanElement>element.querySelector('#red');
targetElement.dispatchEvent(mouseEvents.enter);
expect(targetElement.style.backgroundColor).toEqual('red');
});
it('should set background-color green when passing green parameter', () => {
const targetElement = <HTMLSpanElement>element.querySelector('#green');
targetElement.dispatchEvent(mouseEvents.enter);
expect(targetElement.style.backgroundColor).toEqual('green');
});
});