forlængelse af html med angularjs direktiver

, udvidelse af html med angularjs direktiver,,,,, 75,,,,,,,, 20,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' ikke glip af, er det vigtigste, om angularjs er, at det giver os mulighed for at udvide kapaciteten af html til formålet i dag er dynamiske websider.   i denne artikel, skal jeg vise dig, hvordan du kan bruge angularjs direktiver for at gøre din udvikling hurtigere, lettere, og din kode mere pålidelige.,,, forberedelse,,,,,,, trin 1: http: //skabelon,,, at gøre tingene enklere vil vi skrive alt vores kode i en html fil.skabe og sætte de grundlæggende html skabelon i det:,, <!doctype html > < html > < head > < /head > < krop > < /organ > < /html >, nu tilføje, angular.min.js, fil fra google er cdn i den < head > af dokumentet:,, < manuskript src = "https: //ajax. googleapis. kom /ajax /libs /angularjs /1.2.28 /vinkel. min.js" > < /manuskript >,,, trin 2: at skabe modul, lad os skabe modulet for vores direktiver.jeg vil kalde det eksempel, men du kan vælge, hvad du vil, bare huske på, at vi vil bruge denne betegnelse som namespace for direktiverne skaber vi senere.  , stiller denne kode i et manuskript, tag en bunden af, < head >,,, var: modul = vinkel. - modul ('example "[...]), har vi ikke nogen områder, så den mængde i andet argument, vinkel. module(),   er tom, men ikke fjerne det helt eller du får $- injektor nomod fejl, fordi et argument i form af vinkel. module(), får en henvisning til den allerede eksisterende modul i stedet for at skabe en ny, har du også at tilføje en, ng app =" eksempel ", tillægger den, < krop >, tag for app på arbejde.efter at sagen skal se sådan ud:,, <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script> <script> var module = angular.module('example', []); </script> </head> <body ng-app="example"> </body> </html>,,,The Attribute Directive: 1337 C0NV3R73R,,,First, we will create a simple directive that will work similarly to ngBind, but it will change the text to the leet speak.,,,Step 1: Directive Declaration,,,Directives are declared using ,module.directive(), method:,,module.directive('exampleBindLeet', function () {,,The first argument is the name of the directive. det skal være i camelcase, men da html er ufølsom, du vil bruge dash afgrænset lavere tilfælde form af det (f.eks. forpligte bilparken) på http: //kode.,, funktion blev vedtaget som det andet argument må vende tilbage til et objekt, der beskriver direktivet.for nu vil kun have en ejendom: forbindelsen funktion:,, afkast (link: forbindelse}}), trin 2: forbindelsen funktion, kan du enten fastlægge inden tilbagevenden erklæring, eller direkte i den genstand, der er vendt tilbage.det anvendes til at manipulere dom af det element, som vores direktiv blev anvendt og kaldes med tre argumenter:,, funktion link ($anvendelsesområde, $elem, attrs) {, $anvendelsesområde, er en vinkel anvendelsesområde, formål, $elem, er dom element, som dette direktiv matchede (det er pakket i jqlite, angularjs er del af jquery er mest almindeligt anvendte funktioner), og attrs, er et objekt med alle de elementer, attributter (normaliseret navne, så f.eks. forpligte bilparken vil stå til rådighed, attrs. examplebindleet,.,, den enklest mulige kode for denne funktion i vores direktiv vil se sådan ud:,, var leettext = attrs. examplebindleet. erstatte (/[abegilostz] /gmi, funktion (skrivelse) {tilbage - bilparken [brev. tolowercase()]}); $elem. tekst (leettext)},,,vi erstatter nogle af brevene i den tekst, der er fastsat i den, f.eks. forpligte bilparken, attribut med deres udskiftninger af bilparken.bordet ser sådan ud:,, var bilparken = {a: "4", b: 8, e: "3", g: "6": "."l: '1', o: "0", s. 5) t: '7' z: 2};,, du ville placere det på toppen af din, < manuskript >, tag.som du kan se, er dette den mest grundlæggende bilparken konverter, som erstatter det kun   ti bogstaver. bagefter omregnet snoren til bilparken taler vi bruger jqlite er, text(), en metode til at sætte det i den indre tekst af element, som dette direktiv sammen.,, nu kan du afprøve det med at sætte det: kode i, < krop > af dokumentet:,, < div eksempel binder bilparken = "denne tekst vil blive konverteret til bilparken tale."> < /div >, og produktionen skal se sådan ud:,, men det er ikke sådan, ngbind, direktiv fungerer.vi vil ændre det i de næste skridt,.,,, trin 3: anvendelsesområdet, først og fremmest den bestod i, f.eks. forpligte bilparken, attribut skal være en henvisning til en variabel i det nuværende anvendelsesområde ikke den tekst, som vi ønsker at gøre.for at gøre dette, er vi nødt til at skabe en isoleret anvendelsesområde for direktivet.  , vi kan opnå det ved at tilføje et anvendelsesområde, gøre indsigelse mod returnering værdien af vores direktiv funktion:,, modul. direktiv ('examplebindleet, funktion () {...afkast (link: link, anvendelsesområde: {}}), hver ejendom i dette formål vil være til rådighed i direktivets anvendelsesområde.det er værdier, der skal fastlægges af værdi her.hvis vi bruger - værdien er lig med værdien af denne attribut med samme navn som ejendom.ved "=" vil sige, at vi forventer en anden variabel fra de nuværende muligheder for at blive vedtaget, hvilket vil arbejde, ligesom, ngbind:,, anvendelsesområde: {examplebindleet: = '}, kan du også bruge noget som ejendom navn, og læg den normaliserede (omregnet til camelcase) attributtens navn efter - eller =:,, anvendelsesområde: {tekst: "= examplebindleet'}, vælge, hvad der virker bedst for dig.nu må vi også ændre link funktion at bruge $anvendelsesområde, i stedet for, attr:,, funktion link ($anvendelsesområde, $elem, attrs) (var - leettext = $anvendelsesområde. examplebindleet. erstatte (/[abegilostz] /gmi, funktion (skrivelse) {tilbage tolowercase() bilparken [brev.]}); $elem. tekst (leettext)}, nu brug nginit eller skabe en registeransvarlig og ændre den værdi af, div., er bindende, f.eks. bilparken, tillægger navn af den variable, du brugte:,, < krop ng app = "eksempel" ng lokalitet = "texttoconvert = denne tekst vil blive konverteret til bilparken tale."> < div eksempel binder bilparken = "texttoconvert" > < /div > < /organ >,,, trin 4: påvisning af ændringer,,, men det er stadig ikke hvordan, ngbind, fungerer.for at se, at vi skal sætte et input område at ændre værdien af texttoconvert efter side er blevet ladt:,, < input ng model = "texttoconvert" >,, hvis du åbner den side og forsøge at ændre teksten i den indsats, de vil se, at der ikke ændringer i vores, div..det er fordi, link(), funktion kaldes en gang pr. direktiv under udarbejdelse, så det kan ikke ændre indholdet af det element, hver gang noget ændringer i anvendelsesområdet.  , at ændre, at vi vil bruge $anvendelsesområde. $watch() metode.det accepterer to parametre: den første er vinklet udtryk, som vil blive evalueret, hver gang det anvendelsesområde, der er modificeret, andet er en callback - funktion, som vil blive kaldt, da udtrykket værdi har ændret sig. først, lad os få den kode, vi havde i, link(), funktion i en lokal funktion i det:,, funktion link ($anvendelsesområde, $elem, attrs) {funktion converttext() {var leettext = $anvendelsesområde. examplebindleet. erstatte (/[abegilostz] /gmi, funktion (skrivelse) {tilbage - bilparken [brev. tolowercase()]}); $elem. tekst (leettext)}}, nu efter denne funktion vi ringer, $anvendelsesområde. $watch(), sådan her:,, $anvendelsesområde. $ur ('examplebindleet, convertleet);,, hvis du åbner den side og ændre noget ved input område, vil de se, at indholdet afvores, div. også ændringer, som forventet,.,,, element direktiv: fremskridt bar,,, nu skriver vi et direktiv, der vil skabe en statusbar for os.for at gøre det skal vi bruge et nyt element, < eksempel fremskridt >,.,,, trin 1: stil, for at gøre vores fremskridt bar ligner et fremskridt, bar er vi nødt til at bruge nogle ccs.denne kode i a < stil >, del i, < head > af dokumentet:,, f.eks. fremskridt (display: blok; bredde: 100%; holdning: relativ; grænse: 1px fast black, højde: 18px;} eksempel fremskridt. progressbar {stilling: absolut; top: 0; tilbage: 0; nederst: 0; baggrund: grønne;} eksempel fremskridt. progressvalue {holdning: absolutte, top: 0; tilbage: 0: 0; nederst: 0; tekst tilpasse: center;}, som du kan se, er det ret grundlæggende - anvendelse af en kombination af holdning: relative og absolutte, holdning, position: den grønne bar og værdi i vores, < eksempel fremskridt > element.,,, trin 2: direktiv er egenskaber, vil dette kræve flere muligheder, end de foregående.tag et kig på denne kode (og stik den ind i din, < manuskript >, tag):,, modul. direktiv ('exampleprogress, funktion () (afkast (begrænse: »e« anvendelsesområde: (værdi: "= max: = '}, model:" link: forbindelse}}), som du kan se, er vi stadig ved hjælp af en anvendelsesområde (med to egenskaber, denne gang - værdi for den nuværende værdi og max, for den maksimale værdi) og link() funktion, men der er to nye egenskaber:,,, begrænse: "e" - denne ene siger de, at se på elementer i stedet for attributter.mulige værdier:,,, »a« - passer kun give navne (dette er misligholdelse opførsel, så du behøver ikke at sætte det, hvis du vil have til at matche kun attributter), e - passer kun element navne, »c« - passer kun klasse navne,,, du kan samle dem. eksempel "aec 'vil matche attribut, element og klasse navne.,, model:" - det giver os mulighed for at ændre den indre html af vores element (der er også templateurl, hvis du vil have din html fra særskilt dossier), vil vi naturligvis ikke lade skabelon blank.læg det der: http: //,, < div klasse = "progressbar" > < /div > < div klasse = "progressvalue" > {{percentvalue}}% < /div >,, som du kan se, at vi også kan bruge angluar udtryk i den model, percentvalue - vil blive taget fra direktivets anvendelsesområde.,,, trin 3: forbindelsen funktion, denne funktion vil svare til den, der i det tidligere direktiv.første, skabe en lokal funktion, der skal udføre det direktiv er logisk - i dette tilfælde ajourføre, percentvalue, og fastsætte, div.progressbar, bredde:,, funktion link ($anvendelsesområde, $elem, attrs) {funktion updateprogress() {var percentvalue = matematik. runde ($scope.value /$scope.max * 100 $); scope.percentvalue = matematik. min (matematik. max (percentvalue, 0), 100); $elem. children() [0]. style.width = $scope.percentvalue +% «), som du kan se, kan vi ikke bruge. css(), til at ændre div.progressbar bredde, fordi jqlite ikke støtter selektorer i. children(),.vi skal også bruge matematik. min() og matematik. max(), for at holde den værdi på mellem 0% og 100% -, matematik. max(), vil vende tilbage til 0, hvis precentvalue er mindre end 0, og matematik. min(), vil vende tilbage til 100, hvis percentvalue, er større end 100, nu i stedet for. to, $anvendelsesområde. $watch(), kalder (vi er nødt til at se på ændringer i $scope.value og $anvendelsesområde. max, lad os bruge $anvendelsesområde. $watchcollection(),, der er ens, men arbejder om samlinger af egenskaber, $anvendelsesområde. $watchcollection ([værdi, max. ", updateprogress), bemærke, at vi vedtager snor, der ligner et system som det første paramter, ikke javascript km., for at se, hvordan fungerer det første ændring, nginit, at aktivere to variabler:,, < krop ng app =" eksempel "ng lokalitet =" texttoconvert = denne tekst vil blive omregnet to - bilparken tale!; progressvalue = 20 progressmax = 100 ">,, og så tilføje, < eksempel fremskridt > element under, div. vi brugte tidligere:,, < eksempel fremskridt værdi =" progressvalue "max =" progressmax "> < /eksempel fremskridt >,,, < krop >, skal se sådan ud:,, < krop ng app =" eksempel "ng lokalitet =" texttoconvert = denne tekst vil blive konverteret til bilparken tale!; progressvalue = 20 progressmax = 100 "> < div eksempel binder bilparken =" texttoconvert "> < /div > < eksempel fremskridt værdi =" progressvalue "max =" progressmax "> < /eksempel fremskridt > < /organ >,, og det er resultatet:,,, trin 4: forøgelse af tegnefilm med jquery,,, hvis du tilføjer input til, progressvalue, og progressmax, sådan her:,, < input ng model =" progressvalue "> < input =" ng - model progressmax ">,, vil de bemærke, at når du ændre nogen af de værdier, som den ændring i bredden, er en øjeblikkelig.for at få det til at se lidt bedre, lad os bruge jquery animere den.det gode ved anvendelse af jquery med angularjs er, at når du er jquery, < manuskript >, vinkel vil automatisk erstatte jqlite med det at gøre, $elem, en jquery objekt.,, så lad os begynde med at lægge jquery manuskript til, < head >, det dokument, før angularjs:,, < manuskript src = "http: //kode. jquery. kom /jquery-2.1.0. min.js" > < /manuskript >,, nu kan vi ændre vores, updateprogress(), funktion at bruge jquery er. animate() metode.ændre denne linje:,, $elem. children() [0]. style.width = $scope.percentvalue +% «, for at denne:,, $elem. børn (". progressbar). stop (sandt). manipulerer ((bredde: $scope.percentvalue +%}),,, og du har et smukt animeret statusbar.vi var nødt til at bruge. stop() metode til at stoppe og afslutte uafsluttede animeringer, hvis vi ændrer værdi, mens den informationskampagne i gang (forsøge at fjerne det og ændre værdier i input til hurtigt at se, hvorfor det var nødvendigt).,,, du vil ændre css og sikkert bruge en anden lempelse funktion. din app at matche din stil.,,,,, angularjs indgåelse, er direktiver er et kraftfuldt værktøj til en web - entreprenør.du kan skabe et sæt af deres egne direktiver for at forenkle og styrke deres udviklingsproces.hvad kan du skabe begrænses kun af fantasien, du kan jo gøre alle dine server-side skabeloner til angularjs direktiver.,,, nyttige links, her er nogle forbindelser til angularjs dokumentation:,,, "vejledning: direktiver, omfattende direktiv api,, jqlite (vinkel. element) api,



Previous:
Next Page: