рдХреЛрдгреАрдп рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛рдУрдВ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╕реЗрд╡рд╛рдПрдВ, рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдореЗрд╢рд╛ рд╕рд┐рдВрдЧрд▓рд▓реЗрдЯреЛрди (рдЕрдХреЗрд▓рд╛) рд╣реИрдВред
рдиреЛрдЯ: рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реЛред рдпрд╣ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ
рд╕реНрдерд┐рд░
app.constant('fooConfig', { config1: true, config2: "Default config2" });
рдирд┐рд░рдВрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдирдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдп рдПрдХ рдЖрджрд┐рдо рдпрд╛ рдПрдХ рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рде рд╣реА, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЙрдиреНрдлрд┐рдЧ рд╕реНрдЯреЗрдЬ рдкрд░ рдХрдВрдЯреАрдиреНрдпреВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд░рди рд╕реНрдЯреЗрдЬ рдкрд░ рдФрд░ рдЖрдЧреЗ (рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдиреЛрдЯ) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдореВрд▓реНрдп
app.value('fooConfig', { config1: true, config2: "Default config2 but it can changes" });
рдПрдХ рдЪрд░ рдПрдХ рд╕реНрдерд┐рд░ рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд░ рдлреИрдХреНрдЯреНрд░реА рдХреЗ рдХрд╛рдЯреЗ рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдРрд╕реЗ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реЗрд╡рд╛ рдореЗрдВ рд╣реА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдлрд╝реИрдХреНрдЯрд░реА
app.factory('foo', function() { var thisIsPrivate = "Private"; function getPrivate() { return thisIsPrivate; } return { variable: "This is public", getPrivate: getPrivate }; });
рдлреИрдХреНрдЯрд░реА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ рд╣реИред рдЗрд╕реЗ рд╕рдордЭрдирд╛ рднреА рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред
рдлреИрдХреНрдЯреНрд░реА рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдПрдХ
рдЦреБрд▓реЗ рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдкреНрд░рдХрд╛рд░
foo.variable
рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рдПрдХ рд╕реНрдерд╛рди рдкрд░
foo.variable
рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рд╕реЗрд╡рд╛
app.service('foo', function() { var thisIsPrivate = "Private"; this.variable = "This is public"; this.getPrivate = function() { return thisIsPrivate; }; });
рдПрдХ рд╕реЗрд╡рд╛ (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ) рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣
new Foo();
рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛
new Foo();
рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд╣реА рд╡рд╕реНрддреБ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реЗрд╡рд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
app.factory('foo2', function() { return new Foobar(); }); function Foobar() { var thisIsPrivate = "Private"; this.variable = "This is public"; this.getPrivate = function() { return thisIsPrivate; }; }
Foobar
рдПрдХ
рд╡рд░реНрдЧ рд╣реИ , рдФрд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕реЗрд╡рд╛ рдХреА рддрд░рд╣,
Foobar
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдлрд╝реИрдХреНрдЯрд░реА рдлрд┐рд░ рд╕реЗ рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧреАред
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
app.service('foo3', Foobar);
рдкреНрд░рджрд╛рддрд╛
рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд╡реАрдирддрдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдХрд╛рд░рдЦрд╛рдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
app.provider('foo', function() { return { $get: function() { var thisIsPrivate = "Private"; function getPrivate() { return thisIsPrivate; } return { variable: "This is public", getPrivate: getPrivate }; } }; });
рдкреНрд░рджрд╛рддрд╛ рдХреЛ
$get
рдлрд╝рдВрдХреНрд╢рди рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЬреЛ рд╡рд╣ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ
foo
рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
$get
рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЬрдм рдХрд╛рд░рдЦрд╛рдиреЗ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ рддреЛ рдЗрд╕ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
app.provider('foo', function() { var thisIsPrivate = "Private"; return { setPrivate: function(newVal) { thisIsPrivate = newVal; }, $get: function() { function getPrivate() { return thisIsPrivate; } return { variable: "This is public", getPrivate: getPrivate }; } }; }); app.config(function(fooProvider) { fooProvider.setPrivate('New value from config'); });
рдпрд╣рд╛рдБ рд╣рдордиреЗ
$get
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд░реЗ рдЗрд╕
thisIsPrivate
, рдФрд░ рдлрд┐рд░
setPrivate
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЗрд╕
thisIsPrivate
рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП
thisIsPrivate
ред рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпрд╛ рдХрд┐рд╕реА рдлреИрдХреНрдЯреНрд░реА рдореЗрдВ рд╕рд┐рд░реНрдл рд╕реЗрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ? рдПрдХ рдФрд░ рд▓рдХреНрд╖реНрдп рд╣реИред
рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: JSONP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕ URL рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдпрд╛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐
restangular
ред рдкреНрд░рджрд╛рддрд╛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдкрдХреЛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ
nameProvider
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛,
name
рдирд╣реАрдВред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ
name
рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕реЗ рджреЗрдЦрдХрд░, рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
$routeProvider
рдФрд░
$locationProvider
$routeProvider
$locationProvider
рдХреНрд░рдорд╢рдГ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдФрд░ HTML5mode рдХреЙрдиреНрдлрд╝рд┐рдЧрд░
$locationProvider
рд╣реИрдВред
рдмреЛрдирд╕ 1: рдбреЗрдХреЛрд░реЗрдЯрд░
рддреЛ, рдЖрдкрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдХреБрдЫ рд╕реЗрд╡рд╛
foo
рдореЗрдВ
greet
рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдореБрдЭреЗ рдлреИрдХреНрдЯреНрд░реА рдмрджрд▓рдиреА рдЪрд╛рд╣рд┐рдП? рдирд╣реАрдВ! рдЖрдк рдЗрд╕реЗ рд╕рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
app.config(function($provide) { $provide.decorator('foo', function($delegate) { $delegate.greet = function() { return "Hello, I am a new function of 'foo'"; }; return $delegate; }); });
$provide
рд╡рд╣ рд╣реИ рдЬреЛ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣реЗрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмрд╕ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдкрдХреЛ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП
$provide
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
$provide
рдореЗрдВ рдПрдХ
decorator
рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдЬрд╛рдП рдЧрдП рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЛ
$delegate
, рдЬреЛ рд╕реЗрд╡рд╛ рдХрд╛ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ
greet
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореВрд▓ рд╕реЗрд╡рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдлрд┐рд░ рдПрдХ рдирдИ рд╕рдВрд╢реЛрдзрд┐рдд рд╕реЗрд╡рд╛ рд▓реМрдЯрд╛ рджреАред
рдЕрдм, рдЬрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдирдпрд╛
greet
рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ред
рддреГрддреАрдп-рдкрдХреНрд╖ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдирдХрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рд╕рдВрд╢реЛрдзрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдиреЛрдЯ: рдЖрдк рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдирд╣реАрдВ рд╕рдЬрд╛ рд╕рдХрддреЗред
рдмреЛрдирд╕ 2: рдирдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБ
рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдПрдВ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдлреИрдХреНрдЯреНрд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдирдП рдЙрджрд╛рд╣рд░рдг рдкреИрджрд╛ рдХрд░рддреА рд╣реИред рдЗрд╕рдореЗрдВ рджреЗрд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╣реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрди
рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдЖрдкрдХреЛ рдирдП рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ
Person
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ JSON рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (
Person
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдп) рдФрд░ рд╕реАрдзреЗ
Person
(рдХрдХреНрд╖рд╛ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп) рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ред
рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛
Person
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рд╣реЛрдЧрд╛) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреАред
рдЬрдм рднреА рд╣рдо
personService.getById
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдирдпрд╛
Person
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдлреИрдХреНрдЯреНрд░реА рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реЛ, рддреЛ рдпрд╣ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред
рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдЬреЛрд╢ рдбреЗрд╡рд┐рдб рдорд┐рд▓рд░ рдХрд╛ рд╕рдореНрдорд╛рдиред
рдмреЛрдирд╕ 3: рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП CoffeeScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмреЛрдирд╕ рдЙрджрд╛рд╣рд░рдг 2 рджреЗрдЦреЗрдВ:
app.controller 'MainCtrl', ($scope, personService) -> $scope.aPerson = personService.getById(1) app.controller 'SecondCtrl', ($scope, personService) -> $scope.aPerson = personService.getById(2) $scope.updateIt = () -> $scope.aPerson.update() class Person constructor: (json) -> angular.extend @, json update: () -> @name = "Dave" @country = "Canada" @getById: (id) -> new Person name: "Jesus" country: "Spain" app.factory 'personService', () -> { getById: Person.getById }
рдЕрдм рд╡рд╣ рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рд╕реБрдВрджрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИред
рдЕрдм рд╡рд╣ рдЕрдиреБрд╡рд╛рджрдХ рдХреА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ рдмрджрддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рд╕реЗрд╡рд╛рдПрдБ рдХреЛрдгреАрдп рдХреА рд╕рдмрд╕реЗ рдЖрдХрд░реНрд╖рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдмрд╕ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ