Kuo „AngularJS“ skiriasi $ apimtimi nuo apimties?


Atsakymas 1:

Modulio gamyklos metodai, tokie kaip valdiklis, direktyva, gamykla, filtras, paslauga, animacija, konfigūravimas ir vykdymas, priima argumentus per priklausomybės injekciją (DI). DI atveju įpurškiate apimties objektą su dolerio prefiksu, t. Y. $ Apimtimi. Priežastis: įvesti argumentai turi atitikti injekcinių daiktų pavadinimus, po kurių nurodomas dolerio ($) priešdėlis.

Pvz., Galite įterpti srities ir elemento objektus į valdiklį, kaip nurodyta toliau:

module.controller ('MyController', funkcija ($ apimtis, $ elementas) {});

Kai tokie metodai, kaip direktyvų sujungimo funkcija, negauna argumentų per priklausomybės nustatymą, jūs tiesiog perduodate taikymo srities objektą, nenaudodami dolerio prefikso, t. Y. Priežastis ta, kad skambinantysis sulaukia artimųjų argumentų.

modulis.direktyvas ('myDirective', funkcija () {sugrįžti {nuoroda: funkcija (apimtis, el. adresai) {}};});

Argumentų, susijusių su nepriklausomybe, atveju, jei norite, galite nurodyti suleistų objektų pavadinimą. Aukščiau pateiktą kodą galima perrašyti taip:

module.directive („myDirective“, function () {return {link: function (s, e, a) {}};});

Trumpai tariant, DI atveju apimties objektas yra gaunamas kaip $ apimtis, o ne DI apimties objektas yra gaunamas kaip apimtis arba bet koks pavadinimas.


Atsakymas 2:

Norėdami iliustruoti šį skirtumą, mes pateiksime keletą pavyzdžių kodų:


    
   $ apimtis prieš apimtį 
    
        
    
    
    
           
     angular.module („programa“, []) .controller ('TestCtrl', funkcija ($ apimtis) {   console.log ($ apimtis) }) .directive ('testDirective', function () {   grįžti {     saitas: funkcija (apimtis) {       console.log (apimtis)     }   } })

Jei atidarysite kūrėjų pultą ir atnaujinate puslapį, turėtumėte pamatyti ir $ apimtį, ir apimtį. Atminkite, kad jie abu turi $ id nuosavybę su ta pačia verte, o tai reiškia, kad šie du kintamieji iš tikrųjų nurodo tą patį apimties objektą.

Dabar pakeiskite savo direktyvą, kad būtų naudojama atskira taikymo sritis:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (apimtis) {
      console.log (apimtis)
    }
  }
})

Jei atnaujinsime puslapį, du $ ID bus skirtingi. Taip yra todėl, kad direktyva sukūrė visiškai naują taikymo sritį.

{info} Svarbu suvokti, kad objektas, nežiūrint į pavadinimą, yra ir taikymo sritis, ir „Scope“. Įvairios šios klasės savybės ir metodai yra aprašyti skiltyje $ rootScope.Scope

Jums gali kilti klausimas, kodėl apimties objektas yra nurodytas apimtimi susiejant funkcijas ir $ apimtį valdikliuose. Atsakymas slypi Angular priklausomybės injekcijų sistemoje.

Direktyvos nuorodų funkcija yra tik normali „JavaScript“ funkcija, kurios tipo parašas yra taikymo sritis, elementas, atributas objektas nurodomas tokia tvarka. Jei reiktų apeiti argumentus ir deklaruoti mūsų nuorodų funkciją:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (attr, elem, apimtis) {
      console.log (apimtis)
    }
  }
})

Pirmasis parametras (dabar vadinamas attr) vis tiek bus taikymo srities objektas.

Skirtingai nuo jungčių funkcijų, valdiklio funkcijas vadina „Angular“ įpurškimo sistema. Ši sistema yra intelektualesnė už pagrindinės funkcijos skambutį ir iš tikrųjų tikrins funkcijos parametrų pavadinimus ir perduoda atitinkamas reikšmes valdiklio funkcijai.

Pažiūrėkime, kas nutiks, jei bandysime sukurti valdiklį, naudodami ne „ulatą“, o „$“:

.valdiklis („TestCtrl“, funkcija (apimtis) {
  console.log (apimtis)
})

Mus pasveikino klaidos pranešimas: Klaida: [$ injector: unpr] Nežinomas teikėjas: ulatusProvider <- apimtis <- TestCtrl. „Angular“ įpurškimo sistema bando nustatyti priklausomybę, vadinamą apimtimi, ir nesugeba jos rasti, todėl meta klaidą.

Ši įpurškimo sistema lemia, kad priklausomybės nuo tvarkos deklaravimas neturi jokios reikšmės tol, kol įmanoma išspręsti priklausomybes. Tarkime, kad norėjome pateikti XHR užklausas serveriui naudodamiesi „Angular“ $ http paslauga. Galėtume deklaruoti duomenų valdytoją vienu iš šių būdų:

.controller ('TestCtrl', funkcija ($ apimtis, $ http) {
  console.log ($ apimtis)
  console.log ($ http)
})

.controller ('TestCtrl', funkcija ($ http, $ Scope) {
  console.log ($ apimtis)
  console.log ($ http)
})

Kaip mes sužinojome aukščiau, priklausomybės pavadinimas yra svarbus, tačiau įprasta praktika yra sutrumpinti „JavaScript“ failus ir valdyti kintamųjų pavadinimus prieš diegiant programą gamybai. Neužkirskite kampinio kodo, svarbu prie jo pridėti priklausomybių komentarus.


Atsakymas 3:

Norėdami iliustruoti šį skirtumą, mes pateiksime keletą pavyzdžių kodų:


    
   $ apimtis prieš apimtį 
    
        
    
    
    
           
     angular.module („programa“, []) .controller ('TestCtrl', funkcija ($ apimtis) {   console.log ($ apimtis) }) .directive ('testDirective', function () {   grįžti {     saitas: funkcija (apimtis) {       console.log (apimtis)     }   } })

Jei atidarysite kūrėjų pultą ir atnaujinate puslapį, turėtumėte pamatyti ir $ apimtį, ir apimtį. Atminkite, kad jie abu turi $ id nuosavybę su ta pačia verte, o tai reiškia, kad šie du kintamieji iš tikrųjų nurodo tą patį apimties objektą.

Dabar pakeiskite savo direktyvą, kad būtų naudojama atskira taikymo sritis:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (apimtis) {
      console.log (apimtis)
    }
  }
})

Jei atnaujinsime puslapį, du $ ID bus skirtingi. Taip yra todėl, kad direktyva sukūrė visiškai naują taikymo sritį.

{info} Svarbu suvokti, kad objektas, nežiūrint į pavadinimą, yra ir taikymo sritis, ir „Scope“. Įvairios šios klasės savybės ir metodai yra aprašyti skiltyje $ rootScope.Scope

Jums gali kilti klausimas, kodėl apimties objektas yra nurodytas apimtimi susiejant funkcijas ir $ apimtį valdikliuose. Atsakymas slypi Angular priklausomybės injekcijų sistemoje.

Direktyvos nuorodų funkcija yra tik normali „JavaScript“ funkcija, kurios tipo parašas yra taikymo sritis, elementas, atributas objektas nurodomas tokia tvarka. Jei reiktų apeiti argumentus ir deklaruoti mūsų nuorodų funkciją:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (attr, elem, apimtis) {
      console.log (apimtis)
    }
  }
})

Pirmasis parametras (dabar vadinamas attr) vis tiek bus taikymo srities objektas.

Skirtingai nuo jungčių funkcijų, valdiklio funkcijas vadina „Angular“ įpurškimo sistema. Ši sistema yra intelektualesnė už pagrindinės funkcijos skambutį ir iš tikrųjų tikrins funkcijos parametrų pavadinimus ir perduoda atitinkamas reikšmes valdiklio funkcijai.

Pažiūrėkime, kas nutiks, jei bandysime sukurti valdiklį, naudodami ne „ulatą“, o „$“:

.valdiklis („TestCtrl“, funkcija (apimtis) {
  console.log (apimtis)
})

Mus pasveikino klaidos pranešimas: Klaida: [$ injector: unpr] Nežinomas teikėjas: ulatusProvider <- apimtis <- TestCtrl. „Angular“ įpurškimo sistema bando nustatyti priklausomybę, vadinamą apimtimi, ir nesugeba jos rasti, todėl meta klaidą.

Ši įpurškimo sistema lemia, kad priklausomybės nuo tvarkos deklaravimas neturi jokios reikšmės tol, kol įmanoma išspręsti priklausomybes. Tarkime, kad norėjome pateikti XHR užklausas serveriui naudodamiesi „Angular“ $ http paslauga. Galėtume deklaruoti duomenų valdytoją vienu iš šių būdų:

.controller ('TestCtrl', funkcija ($ apimtis, $ http) {
  console.log ($ apimtis)
  console.log ($ http)
})

.controller ('TestCtrl', funkcija ($ http, $ Scope) {
  console.log ($ apimtis)
  console.log ($ http)
})

Kaip mes sužinojome aukščiau, priklausomybės pavadinimas yra svarbus, tačiau įprasta praktika yra sutrumpinti „JavaScript“ failus ir valdyti kintamųjų pavadinimus prieš diegiant programą gamybai. Neužkirskite kampinio kodo, svarbu prie jo pridėti priklausomybių komentarus.


Atsakymas 4:

Norėdami iliustruoti šį skirtumą, mes pateiksime keletą pavyzdžių kodų:


    
   $ apimtis prieš apimtį 
    
        
    
    
    
           
     angular.module („programa“, []) .controller ('TestCtrl', funkcija ($ apimtis) {   console.log ($ apimtis) }) .directive ('testDirective', function () {   grįžti {     saitas: funkcija (apimtis) {       console.log (apimtis)     }   } })

Jei atidarysite kūrėjų pultą ir atnaujinate puslapį, turėtumėte pamatyti ir $ apimtį, ir apimtį. Atminkite, kad jie abu turi $ id nuosavybę su ta pačia verte, o tai reiškia, kad šie du kintamieji iš tikrųjų nurodo tą patį apimties objektą.

Dabar pakeiskite savo direktyvą, kad būtų naudojama atskira taikymo sritis:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (apimtis) {
      console.log (apimtis)
    }
  }
})

Jei atnaujinsime puslapį, du $ ID bus skirtingi. Taip yra todėl, kad direktyva sukūrė visiškai naują taikymo sritį.

{info} Svarbu suvokti, kad objektas, nežiūrint į pavadinimą, yra ir taikymo sritis, ir „Scope“. Įvairios šios klasės savybės ir metodai yra aprašyti skiltyje $ rootScope.Scope

Jums gali kilti klausimas, kodėl apimties objektas yra nurodytas apimtimi susiejant funkcijas ir $ apimtį valdikliuose. Atsakymas slypi Angular priklausomybės injekcijų sistemoje.

Direktyvos nuorodų funkcija yra tik normali „JavaScript“ funkcija, kurios tipo parašas yra taikymo sritis, elementas, atributas objektas nurodomas tokia tvarka. Jei reiktų apeiti argumentus ir deklaruoti mūsų nuorodų funkciją:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (attr, elem, apimtis) {
      console.log (apimtis)
    }
  }
})

Pirmasis parametras (dabar vadinamas attr) vis tiek bus taikymo srities objektas.

Skirtingai nuo jungčių funkcijų, valdiklio funkcijas vadina „Angular“ įpurškimo sistema. Ši sistema yra intelektualesnė už pagrindinės funkcijos skambutį ir iš tikrųjų tikrins funkcijos parametrų pavadinimus ir perduoda atitinkamas reikšmes valdiklio funkcijai.

Pažiūrėkime, kas nutiks, jei bandysime sukurti valdiklį, naudodami ne „ulatą“, o „$“:

.valdiklis („TestCtrl“, funkcija (apimtis) {
  console.log (apimtis)
})

Mus pasveikino klaidos pranešimas: Klaida: [$ injector: unpr] Nežinomas teikėjas: ulatusProvider <- apimtis <- TestCtrl. „Angular“ įpurškimo sistema bando nustatyti priklausomybę, vadinamą apimtimi, ir nesugeba jos rasti, todėl meta klaidą.

Ši įpurškimo sistema lemia, kad priklausomybės nuo tvarkos deklaravimas neturi jokios reikšmės tol, kol įmanoma išspręsti priklausomybes. Tarkime, kad norėjome pateikti XHR užklausas serveriui naudodamiesi „Angular“ $ http paslauga. Galėtume deklaruoti duomenų valdytoją vienu iš šių būdų:

.controller ('TestCtrl', funkcija ($ apimtis, $ http) {
  console.log ($ apimtis)
  console.log ($ http)
})

.controller ('TestCtrl', funkcija ($ http, $ Scope) {
  console.log ($ apimtis)
  console.log ($ http)
})

Kaip mes sužinojome aukščiau, priklausomybės pavadinimas yra svarbus, tačiau įprasta praktika yra sutrumpinti „JavaScript“ failus ir valdyti kintamųjų pavadinimus prieš diegiant programą gamybai. Neužkirskite kampinio kodo, svarbu prie jo pridėti priklausomybių komentarus.


Atsakymas 5:

Norėdami iliustruoti šį skirtumą, mes pateiksime keletą pavyzdžių kodų:


    
   $ apimtis prieš apimtį 
    
        
    
    
    
           
     angular.module („programa“, []) .controller ('TestCtrl', funkcija ($ apimtis) {   console.log ($ apimtis) }) .directive ('testDirective', function () {   grįžti {     saitas: funkcija (apimtis) {       console.log (apimtis)     }   } })

Jei atidarysite kūrėjų pultą ir atnaujinate puslapį, turėtumėte pamatyti ir $ apimtį, ir apimtį. Atminkite, kad jie abu turi $ id nuosavybę su ta pačia verte, o tai reiškia, kad šie du kintamieji iš tikrųjų nurodo tą patį apimties objektą.

Dabar pakeiskite savo direktyvą, kad būtų naudojama atskira taikymo sritis:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (apimtis) {
      console.log (apimtis)
    }
  }
})

Jei atnaujinsime puslapį, du $ ID bus skirtingi. Taip yra todėl, kad direktyva sukūrė visiškai naują taikymo sritį.

{info} Svarbu suvokti, kad objektas, nežiūrint į pavadinimą, yra ir taikymo sritis, ir „Scope“. Įvairios šios klasės savybės ir metodai yra aprašyti skiltyje $ rootScope.Scope

Jums gali kilti klausimas, kodėl apimties objektas yra nurodytas apimtimi susiejant funkcijas ir $ apimtį valdikliuose. Atsakymas slypi Angular priklausomybės injekcijų sistemoje.

Direktyvos nuorodų funkcija yra tik normali „JavaScript“ funkcija, kurios tipo parašas yra taikymo sritis, elementas, atributas objektas nurodomas tokia tvarka. Jei reiktų apeiti argumentus ir deklaruoti mūsų nuorodų funkciją:

.directive ('testDirective', function () {
  grįžti {
    apimtis: {},
    saitas: funkcija (attr, elem, apimtis) {
      console.log (apimtis)
    }
  }
})

Pirmasis parametras (dabar vadinamas attr) vis tiek bus taikymo srities objektas.

Skirtingai nuo jungčių funkcijų, valdiklio funkcijas vadina „Angular“ įpurškimo sistema. Ši sistema yra intelektualesnė už pagrindinės funkcijos skambutį ir iš tikrųjų tikrins funkcijos parametrų pavadinimus ir perduoda atitinkamas reikšmes valdiklio funkcijai.

Pažiūrėkime, kas nutiks, jei bandysime sukurti valdiklį, naudodami ne „ulatą“, o „$“:

.valdiklis („TestCtrl“, funkcija (apimtis) {
  console.log (apimtis)
})

Mus pasveikino klaidos pranešimas: Klaida: [$ injector: unpr] Nežinomas teikėjas: ulatusProvider <- apimtis <- TestCtrl. „Angular“ įpurškimo sistema bando nustatyti priklausomybę, vadinamą apimtimi, ir nesugeba jos rasti, todėl meta klaidą.

Ši įpurškimo sistema lemia, kad priklausomybės nuo tvarkos deklaravimas neturi jokios reikšmės tol, kol įmanoma išspręsti priklausomybes. Tarkime, kad norėjome pateikti XHR užklausas serveriui naudodamiesi „Angular“ $ http paslauga. Galėtume deklaruoti duomenų valdytoją vienu iš šių būdų:

.controller ('TestCtrl', funkcija ($ apimtis, $ http) {
  console.log ($ apimtis)
  console.log ($ http)
})

.controller ('TestCtrl', funkcija ($ http, $ Scope) {
  console.log ($ apimtis)
  console.log ($ http)
})

Kaip mes sužinojome aukščiau, priklausomybės pavadinimas yra svarbus, tačiau įprasta praktika yra sutrumpinti „JavaScript“ failus ir valdyti kintamųjų pavadinimus prieš diegiant programą gamybai. Neužkirskite kampinio kodo, svarbu prie jo pridėti priklausomybių komentarus.