CoffeeScript рдФрд░ AngularJS

рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд╣рд┐рд▓ CoffeeScript рдФрд░ AngularJS рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рджред рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рднреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдзрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

AngularJS рдФрд░ CoffeeScript рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕рдВрдпреЛрдЬрди рд╣реИ, рднрд▓реЗ рд╣реА CoffeeScript AngularJS рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдХреБрдЫ рддрд░рдХреАрдмреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░реЗрдЧрд╛, рдЬреЛ рдЖрдкрдХреЗ AngularJS рдХреЛрдб рдХреЛ "рдЖрд╕рд╛рдиреА" рдХрд░реЗрдЧрд╛ред

рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░рд┐рдХреЙрд░реНрдб


рдХреЛрдгреАрдп рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХ 'рдПрдВрдЯрд░ рдХреБрдВрдЬреА' рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдПрдБ рдЬреЛ рдПрдХ рд╡рд┐рд▓рдореНрдм рдХреЗ рд╕рд╛рде рдПрдВрдЯрд░ рдХреБрдВрдЬреА рджрдмрд╛рдХрд░ рдХрд┐рд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдорд╣рддреНрд╡ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡рд┐рдЪрд╛рд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдФрд░ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред
рддреЛ рд╣рдо рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
<input enter-key="submit()" enter-key-delay="10" /> 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб:
 app.directive('enterKey', function ($timeout) { return function (scope, elem, attrs) { elem.bind('keydown', function (e) { if (e.keyCode === 13) { $timeout(function () { scope.$apply(attrs.enterKey); }, +attrs.enterKeyDelay); } }); } }); 

рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХрд░реЗрдВ:
 app.directive 'enterKey', ($timeout) -> (scope, elem, attrs) -> elem.bind 'keydown', (e) -> if e.keyCode is 13 $timeout -> scope.$apply attrs.enterKey , +attrs.enterKeyDelay 

CoffeeScript рдореЗрдВ, рдкреНрд░рддреАрдХ -> рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рдордиреЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрд╖реНрдардХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдЙрджрд╛рд╣рд░рдг $ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рд╣рдордиреЗ рдХреЛрдб рдХреА 10 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреАрд╡рд░реНрдб рдХреЗ 4 рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдХреЛрдб рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рдХрдо рд╣реЛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд░реВрдмреА рдХреА рддрд░рд╣) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рдЯрд░реНрди


рд╕реНрд╡рдЪрд╛рд▓рд┐рдд (рдпрд╛ рдирд┐рд╣рд┐рдд) рд░рд┐рдЯрд░реНрди рдПрдХ рдФрд░ рд▓рд╛рдн рд╣реИ рдЬреЛ рд▓рд┐рдЦрдиреЗ рдХреЛ рдХреЛрдгреАрдп рдХреЛрдб рдХреЛ рддреЗрдЬ рдФрд░ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рдЯрд░реНрди рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЕрдВрддрд░ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред

рдлрд┐рд▓реНрдЯрд░

 app.filter('capitalise', function (str) { return str.charAt(0).toUpperCase() + str.slice(1); }); 

 app.filter 'capitalise', (str) -> str.charAt(0) + str[1..] 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмреЛрдирд╕ str.slice (1) рдмрдирд╛рдо рд╕рд░рдгреА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ str [рез ..] ред

рдлрд╝реИрдХреНрдЯрд░реА

 app.factory('urlify', function (text) { // nb:       return text.toLowerCase().replace(" ", ""); }); 

 app.factory 'urlify', (text) -> text.toLowerCase().replace " ", "" 

рдирд┐рд░реНрджреЗрд╢ (рдлрд┐рд░ рд╕реЗ)

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдлрд┐рдиреЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдЯреЛрдореИрдЯрд┐рдХ рд░рд┐рдЯрд░реНрди, YAML рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг AngularJS рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
 app.directive('directiveName', function factory(injectables) { return { priority: 0, template: '<div></div>', templateUrl: 'directive.html', replace: false, transclude: false, restrict: 'A', scope: false, controller: function ($scope, $element, $attrs, $transclude, otherInjectables) { ... }, compile: function compile(tElement, tAttrs, transclude) { return { pre: function preLink(scope, iElement, iAttrs, controller) { ... }, post: function postLink(scope, iElement, iAttrs, controller) { ... } } }, link: function postLink(scope, iElement, iAttrs) { ... } } }); 

 app.directive 'directiveName', (injectables) -> priority: 0 template: '<div></div>' templateUrl: 'directive.html' replace: false transclude: false restrict: 'A' scope: false controller: ($scope, $element, $attrs, $transclude, otherInjectables) -> ... compile: (tElement, tAttrs, transclude) -> pre: (scope, iElement, iAttrs, controller) -> ... post: (scope, iElement, iAttrs, controller) -> ... link: (scope, iElement, iAttrs) -> ... 

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рдЯрд░реНрди рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдлрд┐рдиреЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд┐рд╡ рдФрд░ рдХрдВрдкрд╛рдЗрд▓ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрдХреНрд╖рд╛рдПрдВ

рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╕рдмрд╕реЗ рд╕реБрдЦрдж рд╕рдорд╛рд╡реЗрд╢ рд╣реИрдВред рдпрд╣рд╛рдБ рд╡реЗ рдХреНрдпрд╛ рджрд┐рдЦрддреЗ рд╣реИрдВ:
 class Animal constructor: (@name) -> move: (meters) -> alert @name + " moved #{meters}m." snake = new Animal('snake') snake.move(10) # alerts "snake moved 10m." 

CoffeeScript рдореЗрдВ, @ рдкреНрд░рддреАрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕рдВрдХреЗрддрди рд╣реИред рдЗрд╕рд▓рд┐рдП, @name рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдлрдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ @ рд╕рд┐рдВрдмрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдЬреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдирд┐рдорд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╕рдорд╛рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдорддреБрд▓реНрдп рд╣реИред
 function Animal(name) { this.name = name; } Animal.prototype.move = function (meters) { alert(this.name + "moved" + meters + "m.") } var snake = new Animal('snake') snake.move(10) // alerts "snake moved 10m.", as before 

CoffeeScript рдПрдХ рдирд╛рдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдХреЛрдгреАрдп рдореЗрдВ, рдпрд╣ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ: рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдФрд░ рдирдП рдирд┐рдпрдВрддреНрд░рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рдеред

рд╕реЗрд╡рд╛рдПрдВ

рдЬрдмрдХрд┐ рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдорддрднреЗрджреЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 var gandalf = angular.module('gandalf', []); function Gandalf() { this.color = 'grey'; } Gandalf.prototype.comeBack = function () { this.color = 'white'; } gandalf.service('gandalfService', Gandalf); var injector = angular.injector(['gandalf', 'ng']); injector.invoke(function (gandalfService) { console.log(gandalfService.color); gandalfService.comeBack() console.log(gandalfService.color); }); 

рдпрд╣ рдХреЙрдлреА рдХреЛрдб рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 gandalf = angular.module 'gandalf', [] gandalf.service 'gandalfService', class Gandalf constructor: -> @color = 'grey' comeBack: -> @color = 'white' injector = angular.injector ['gandalf', 'ng'] injector.invoke (gandalfService) -> console.log gandalfService.color gandalfService.comeBack() console.log gandalfService.color 

рдпрд╣рд╛рдВ рд╣рдо рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рд╕реЗрд╡рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд░реНрдЧ рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдПрдХ рдЧреИрдВрдбреЗрдл рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ $ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрд░реА рдХреЗ рд╕рд╛рде "рд░рд┐рдЯрд░реНрди" рдХрд░рддрд╛ рд╣реИред
 gandalf.service 'gandalfService', class Gandalf constructor: (@$timeout) -> @color = 'grey' comeBack: (time) -> # ' '  coffeescript      #  'this',  @color -     ,   . @$timeout => @color = 'white' , time 

рддрд░реНрдХреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдирд╛рдо $ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдЧрд╛ , рдЗрд╕рд▓рд┐рдП рдХреЛрдгреАрдп рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╛рдкрд╕реА ред

рдирд┐рдпрдВрддреНрд░рдХреЛрдВ

AngularJS 1.1.5 рдирдП рдирд┐рдпрдВрддреНрд░рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдЖрдк рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдХрдХреНрд╖рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, AngularJS рдкреГрд╖реНрда рдкрд░ рдЯреВрдбреВрд▓рд┐рд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ HTML рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 <body ng-app="todoApp"> <div ng-controller="TodoCtrl as todos"> <span>{{todos.remaining()}} of {{todos.list.length}} remaining</span> [<a href="" ng-click="todos.archive()">archive</a>] <ul> <li ng-repeat="todo in todos.list"> <input type="checkbox" ng-model="todo.done"> <span class="done-{{todo.done}}">{{todo.text}}</span> </li> </ul> <form ng-submit="todos.addTodo()"> <input type="text" ng-model="todos.input" placeholder="add a new todo"> <input type="submit" value="add"> </form> </div> </body> 

рдФрд░ рдЗрд╕ CoffeeScript рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 app = angular.module 'todoApp', [] app.controller 'TodoCtrl', class TodoCtrl list: [ text: "learn coffescript" done: false , text: "learn angular" done: true ] addTodo: -> @list.push text: @input done: false @input = '' remaining: -> count = 0 for todo in @list count += if todo.done then 0 else 1 count archive: -> oldList = @list @list = [] for todo in oldList unless todo.done @list.push todo 

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ AngularJS рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди рд╕рд╛рдереА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рдЖрд╕рд╛рдиреА рдЗрд╕рдХреА рдЦрд╛рдорд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рддреА рд╣реИред
рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕реЗ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ , рдЕрд╕реНрддрд┐рддреНрд╡рдЧрдд рдСрдкрд░реЗрдЯрд░ , рд╕рд░рдгрд┐рдпрд╛рдБ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ ред рдпрд╣ рд╕рдм рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдЦрдж рдФрд░ рдЙрддреНрдкрд╛рджрдХ рднрд╛рд╖рд╛ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВ ред

Source: https://habr.com/ru/post/In188406/


All Articles