Apa itu arahan AngularJS?

181

Saya telah menghabiskan cukup banyak waktu membaca dokumentasi AngularJS dan beberapa tutorial, dan saya cukup terkejut melihat betapa sulitnya dokumentasi tersebut.

Saya memiliki pertanyaan sederhana yang dapat dijawab yang juga berguna bagi orang lain yang ingin mengambil AngularJS:

Apa itu arahan AngularJS?

Seharusnya ada definisi yang sederhana dan tepat tentang arahan di suatu tempat, tetapi situs web AngularJS menawarkan definisi yang sangat tidak berguna ini:

Di beranda :

Arahan adalah fitur unik dan kuat yang tersedia di AngularJS. Arahan memungkinkan Anda menemukan sintaks HTML baru, khusus untuk aplikasi Anda.

Dalam dokumentasi pengembang :

Arahan adalah cara untuk mengajarkan trik baru HTML. Selama DOM arahan kompilasi dicocokkan dengan HTML dan dieksekusi. Ini memungkinkan arahan untuk mendaftarkan perilaku, atau mengubah DOM.

Dan ada serangkaian pembicaraan tentang arahan yang, ironisnya, tampaknya menganggap audiens sudah mengerti apa itu arahan.

Adakah yang bisa menawarkan, untuk referensi yang jelas, definisi yang tepat tentang apa arahan yang menjelaskan:

  1. Apa itu (lihat definisi jQuery sebagai contoh)
  2. Masalah dan situasi praktis apa yang dimaksudkan untuk diatasi
  3. Apa pola desain yang diwujudkannya, atau sebagai alternatif, bagaimana itu cocok dengan misi MVC / MVW yang diakui AngularJS.
tohster
sumber
2
Anda meminta saya di ... lihat definisi yang jelas tentang jQuery sebagai contoh.
joshuamabina
Tidak yakin bagaimana itu pada tahun 2012 di Stack Overflow, tapi saya baru saja merevisi pertanyaan ini dan menambahkan tag "angular-directive". Info tag- nya sebenarnya memberikan definisi yang cukup jelas. Juga, saya perhatikan bahwa saya tidak dapat menemukan kutipan kedua di dokumen pengembang ...
user4642212

Jawaban:

142

Apa itu (lihat definisi jQuery sebagai contoh)?

Arahan pada dasarnya adalah fungsi yang dijalankan ketika kompiler Angular menemukannya di DOM. Fungsi dapat melakukan hampir semua hal, itulah sebabnya saya pikir agak sulit untuk mendefinisikan apa itu arahan. Setiap arahan memiliki nama (seperti ng-repeat, tab, make-up-your-own) dan setiap arahan menentukan di mana ia dapat digunakan: elemen, atribut, kelas, dalam komentar.

Arahan biasanya hanya memiliki fungsi tautan (pos). Arahan yang rumit dapat memiliki fungsi kompilasi, fungsi pra-tautan, dan fungsi pasca-tautan.

Masalah dan situasi praktis apa yang dimaksudkan untuk diatasi?

Hal yang paling kuat yang dapat dilakukan arahan adalah memperluas HTML. Ekstensi Anda adalah Bahasa Khusus Domain (DSL) untuk membangun aplikasi Anda. Misalnya, jika aplikasi Anda menjalankan situs belanja online, Anda dapat memperluas HTML untuk memiliki "keranjang belanja", "kupon", "spesial", dll. Arahan - kata atau objek atau konsep apa pun yang lebih alami untuk digunakan dalam " "belanja online" domain, bukan "div" dan "span" (seperti @WTK sudah sebutkan).

Arahan juga dapat membuat komponen HTML - kelompokkan sekelompok HTML menjadi beberapa komponen yang dapat digunakan kembali. Jika Anda menemukan diri Anda menggunakan ng-include untuk menarik banyak HTML, mungkin saatnya untuk merefleksikan arahan.

Apa pola desain yang diwujudkannya, atau sebagai alternatif, bagaimana itu cocok dengan misi MVC / MVW yang diklaim dari angularjs

Arahan adalah tempat Anda memanipulasi DOM dan menangkap peristiwa DOM. Inilah sebabnya mengapa kompilasi direktif dan fungsi tautan keduanya menerima "elemen" sebagai argumen. Kamu bisa

  • tentukan sekelompok HTML (yaitu templat) untuk menggantikan arahan
  • ikat acara dengan elemen ini (atau anak-anaknya)
  • tambah / hapus satu kelas
  • ubah nilai teks ()
  • perhatikan perubahan pada atribut yang didefinisikan dalam elemen yang sama (sebenarnya itu adalah nilai atribut yang ditonton - ini adalah properti lingkup, karenanya arahan mengawasi "model" untuk perubahan)
  • dll.


Dalam HTML kita memiliki hal-hal seperti <a href="...">, <img src="...">, <br>, <table><tr><th>. Bagaimana Anda menggambarkan apa a, href, img, src, br, table, tr, dan th? Itulah arahannya.

Mark Rajcok
sumber
2
Mark, terima kasih. Saya pikir ini jelas dan mungkin yang paling dekat dengan jawaban yang akurat. Saya pikir arahan selalu terikat dengan tag html bukan? Jadi mungkin lebih akurat untuk mengatakan bahwa arahan adalah fungsi yang terikat pada tag HTML. Dengan demikian, ini memungkinkan bahasa HTML diperluas secara deklaratif.
tohster
Nah, arahan dapat digunakan dalam komentar, jadi tidak semua arahan harus terikat pada tag HTML. Misalnya,<!-- directive: my-directive exp -->
Mark Rajcok
Mark, apakah itu merupakan penggunaan arahan yang tidak konvensional? yaitu arahan secara konvensional digunakan dan dimaksudkan untuk memperluas HTML.
tohster
9
OK saya punya pemahaman yang lebih baik sekarang. Salah satu cara untuk memikirkannya adalah: 1. DSL biasanya mewakili pohon sintaks 2. HTML DOM adalah pohon sintaksis DSL tetapi yang kaku: tag sebagian besar dirancang dan dituju secara kaku, dan tidak dapat diperluas. 3. AngularJS dan mekanisme arahan khusus, membuat DOM HTML lebih fleksibel dengan memungkinkan pengembang untuk membangun simpul pohon kustom. Node ini dapat mewakili perilaku baru, atau agregasi dari perilaku yang ada (sub-pohon) 4. Dengan demikian, arahan memungkinkan HTML DOM untuk berkembang menjadi DSL kustom
tohster
1
@MarkRajcok Saya berjuang dengan paragraf terakhir Anda. Apakah polos <div></div>adalah arahan? Anda bilang ya. Tetapi tidak ada dekorasi di sini (melalui elemen, kelas, komentar, atribut). Orang-orang di sini mengatakan bahwa ini adalah penanda ulang untuk DOM HTML . Bisakah Anda mengklarifikasi? (Saya tidak berbicara tentang penyebab di mana Anda dapat membuat arahan untuk elemen polos seperti <div>)
Royi Namir
11

Mungkin definisi yang sangat sederhana dan awal untuk arahan sudut akan menjadi

Arahan AngularJS (ng-directives) adalah atribut HTML dengan awalan ng (model-ng, aplikasi-ng, ng-repeat, ng-bind) yang digunakan oleh Angular untuk memperluas HTML. ( dari: tutorial sudut W3schools )

Beberapa contohnya adalah

The ng-aplikasi direktif mendefinisikan sebuah aplikasi AngularJS.

The ng model direktif mengikat nilai kontrol HTML (input, pilih, textarea) untuk data aplikasi.

The ng-mengikat mengikat direktif data aplikasi ke tampilan HTML.

<div ng-app="">
    <p>Name: <input type="text" ng-model="name"></p>
    <p ng-bind="name"></p>
</div>

Lihat tutorial ini, setidaknya bagi saya itu adalah salah satu pengantar terbaik untuk Angular. Pendekatan yang lebih lengkap adalah segala sesuatu yang dikatakan @ mark-rajcok sebelumnya.

jplozgom
sumber
4

Melihat dokumentasi, arahan adalah struktur yang Anda dapat menulis bahwa angularjs mem-parsing untuk membuat objek dan perilaku. Dengan kata lain itu adalah template di mana Anda menggunakan campuran dari sembarang node dan pseudo-javascript dan placeholder untuk data untuk mengekspresikan niat tentang bagaimana widget (komponen) Anda terstruktur, bagaimana perilakunya, dan bagaimana ia diumpankan dengan data. Angularjs kemudian menjalankan arahan - arahan tersebut untuk menerjemahkannya menjadi kode html / javascript yang berfungsi.

Arahan ada sehingga Anda dapat membangun komponen (widget) yang lebih kompleks menggunakan semantik yang tepat. Lihat saja contoh angularj dari arahan - mereka mendefinisikan panel tab (yang tentu saja tidak valid dalam HTML biasa). Ini lebih intuitif daripada menggunakan seperti div-s atau rentang untuk membuat struktur yang kemudian ditata agar terlihat seperti panel tab.

WTK
sumber
Saya menambahkan apa yang saya rasakan kurang penjelasan teknis.
raam86
1
Terima kasih ini cukup membantu. Jadi mungkin saya bisa menganggapnya sebagai semacam template dinamis (mirip dengan kelas dalam pemrograman OO) yang merangkum komponen, menggambarkannya dengan properti dan perilaku, mampu dipakai, dan dapat mengekspresikan dirinya ke DOM? Dan alasan keberadaannya (vs. objek javascript atau templat html) adalah untuk memungkinkan tag HTML untuk mengambil perilaku yang lebih dinamis, seperti objek sehingga mereka dapat mulai dimanipulasi dalam pemrograman tipe OO?
tohster
Iya dan tidak. Saya tidak akan mengatakan bahwa arahan alasan ada banyak hubungannya dengan mereka dapat dimanipulasi dalam pemrograman OO. Bahkan seluruh pendekatan angularjs untuk kerangka kerja terasa sangat terkait dengan HTML dan atribut DOM node sewenang-wenang daripada menulis kode OO Javascript. Saya mendapatkan getaran itu dengan melihat semua contoh bagaimana angular menyelesaikan masalah setiap hari. Saya akan mengatakan bahwa alasan utama di balik arahan adalah untuk memiliki cara untuk menanamkan perilaku dan data dalam satu komponen yang terstruktur secara semantik.
WTK
3

Dalam AngularJS Directive adalah penanda ulang html untuk elemen DOM HTML seperti atribut (membatasi- A), nama elemen (pembatasan- E), komentar (pembatasan- M) atau kelas CSS (batasan - C) yang memberi tahu kompiler HTML AngularJS ($ kompilasi) untuk melakukan perilaku tertentu ke elemen DOM atau bahkan mengubah elemen DOM dan anak-anaknya. Beberapa Contoh adalah ng-bind, ng-hide / show dll.

Vivek Panday
sumber
2

Beranda sangat jelas tentang ini: Ketika Anda mengarahkan kursor ke tab di bagian terakhir:

Kami telah menambah kosakata HTML dengan tabs elemen khusus . The tabsabstrak struktur HTML yang kompleks dan perilaku yang diperlukan untuk rendering tab. Hasilnya adalah tampilan yang lebih mudah dibaca dan sintaks yang sangat mudah digunakan kembali. "

Kemudian di tab berikutnya:

angular.module('components', []).
  directive('tabs', function() {
    return {
      restrict: 'E',
      transclude: true,
      scope: {},
      controller: function($scope, $element) {
        var panes = $scope.panes = [];

        $scope.select = function(pane) {
          angular.forEach(panes, function(pane) {
            pane.selected = false;
          });
          pane.selected = true;
        }

Jadi Anda dapat menemukan elemen html yaitu tabsdan membiarkan sudut menangani rendering dari elemen-elemen tersebut.

raam86
sumber
2
Terima kasih atas tanggapan cepatnya! Jadi tujuan arahan adalah untuk memperpanjang kosa kata HTML dengan membuat tag dan atribut khusus? Itu tampaknya cukup kuat, meskipun tampaknya mengatasi ruang lingkup masalah yang jauh lebih luas daripada "MVW". BTW yang lain mungkin tidak setuju, tetapi saya akan berpikir bahwa menggulir ke bagian bawah halaman, dan kemudian melayang di atas kata hyperlink, dan kemudian membaca tooltip pop-up yang tidak pernah menyebutkan kata 'directive' bukanlah kata " "definisi yang sangat jelas tentang apa itu arahan. Meskipun demikian, sangat menghargai respon cepat.
tohster
Iya! Anda dapat memeriksa biola yang mereka buat ini. Html yang sebenarnya berbeda dengan yang ada di panel html.
raam86