рдЕрднрд┐рд╡рд╛рджрди, рд╣реЗрдмрд░ рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ!
рдореИрдВ рдЕрдкрдиреА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрдм рддрдХ, рдХреЛрдгреАрдп рдФрд░ рдиреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдХреБрдЫ рд╕рдордп (рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЗ) рдПрдВрдЧреБрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдореЗрд░реЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝рд╛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред рдмреЗрд╢рдХ, рдпрд╣ рдлреЗрд╕рдмреБрдХ рд▓реЙрдЧрд┐рди рд╣реА рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдлреЗрд╕рдмреБрдХ рдЬреЗрдПрд╕ рдПрд╕рдбреАрдХреЗ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рд╡рд┐рде рдПрдВрдЧреБрд▓рд░.рдЬреЗрдПрд╕" рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛ рд░реЛрдЪрдХ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред
[рдЫреЛрдЯреЗ рдЕрд╕реНрд╡реАрдХрд░рдг]
рд╢рд╛рдпрдж рдЗрд╕ рдкрд╛рда рдХреЗ рдиреАрдЪреЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдмрдХрд╡рд╛рд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрдлреЛрдЯрдХ рдорд┐рд╢реНрд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рдореВрд▓реНрдпрд╛рдВрдХрди рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд / рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рдЪреБрдирдиреЗ рдореЗрдВ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдорджрдж рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред
рдмреИрдХрдПрдВрдб
рдореЗрд░реА рдкрд╕рдВрдж рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ, рдиреЛрдб рдкрд░ рдЧрд┐рд░ рдЧрдИред рд╡реИрд╕реЗ, рдореБрдЭреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдФрд░ рдореБрдлреНрдд рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред "рдХреНрдпреЛрдВ" рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЛ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣рд╛рдЙрдЯреЛ рд▓реЗрдЦ рд╣реИрдВ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╕рд░рд▓ рдорд╛рд░реНрдЧред рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА
рдЖрдЧреЗ рд╣рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ:
app.jsvar express = require('express') , expressLayouts = require('express-ejs-layouts') , less = require('less-middleware') , routes = require('./routes') , config = require('./settings') , http = require('http') , path = require('path') , app = express() ;
рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд░реВрдЯрд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдХреА рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдЕрдХреНрд╕рд░ "рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ" рдЬреИрд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдо рд╕рд┐рдВрдЧрд▓-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде <ng-view> </ ng-view> рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреЗрдЬ рджреЗ, рддрд╛рдХрд┐ рдХреЛрдгреАрдп рд╡рд░реНрддрдорд╛рди рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ URL рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдВрд╢рд┐рдХ (рдЙрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ ..) рд▓реЛрдб рдХрд░реЗрдВ
рддреЛ - рд╣рдо рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЛ рдХреИрд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЬреЗрдПрд╕, рд╕реАрдПрд╕рдПрд╕, рдЪрд┐рддреНрд░) рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреГрд╖реНрдареЛрдВ (рдпрджрд┐ рд╡реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИрдВ) рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИ рддрд╛рдХрд┐:
- рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧреИрд░-рдореМрдЬреВрдж рдкреГрд╖реНрда рдкрдереЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╕реЗ рд╢рдкрде рдирд╣реАрдВ рд▓реА рдФрд░ рди рд╣реА рдХреЛрдгреАрдп рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдпрд╛;
- рдлрд┐рд░ рднреА рдЙрд╕рдиреЗ рдЖрдкрд╕реЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬреЛ рд╡рд╣ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдиреЗ рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рд╕реНрдереИрддрд┐рдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рд╣реИ;
рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
// app.use('/static', express.static(path.join(__dirname, 'public'))); app.use('/static', express.static(path.join(__dirname, 'bower_components'))); app.use(app.router); // - . // landing page app.get('/' , routes.index); // GET index, .. homepage <ng-view> app.get('/partials/:name' , routes.partials); // , Partials' Angular'a app.get('/partials/:folder/:name' , routes.partials); // , app.all(/^(\/((?!static)\w.+))+$/ , routes.index); // , ", /static/ Angular'a".
рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рд╢реНрди рдЙрдарддрд╛ рд╣реИ - рдпрджрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд░реЛрдзрд┐рдд рдкреГрд╖реНрда (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП / рдУрд▓реЛрд▓реЛ) рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо 404 рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╕реЗ рдмрддрд╛рдПрдВрдЧреЗ?
рджреГрд╢реНрдпрдкрдЯрд▓
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВ рдХрд┐ рдПрдХ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддреЗ рд╕рдордп рдПрдВрдЧреБрд▓рд░ рдпрд╣ рдХреИрд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛рдВ рдЧрд▓рддреА рдХреА рд╣реИ, рдЖрдЗрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВ (рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рднреА рд╕реНрдЯреИрдЯрд┐рдХреНрд╕, рди рдХрд┐ рдмреЛрд╡рд░ рд╕реЗ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ)
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рдатФЬтФАтФА рдЬрдирддрд╛
Ss ss рд╕реАрдПрд╕рдПрд╕
тФФтФАтФА тФФтФАтФА тФВ style.css
тФЬтФАтФА тФЬтФАтФА рдЫрд╡рд┐рдпрд╛рдВ
тФФтФАтФА p тФВ fb_button.png
S s рдЬреЗ.рдПрд╕.
тФЬтФАтФА initial тФВ application.js - рдЖрд╡реЗрджрди рдЖрд░рдВрднреАрдХрд░рдгред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдмрд╛рдж рдореЗрдВ ...
тФЬтФАтФА a тФВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ.рдЬреЗрдПрд╕ - рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдореЙрдбреНрдпреВрд▓
тФЬтФАтФА global тФВ directives.js - рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдореЙрдбреНрдпреВрд▓
тФВ filters тФВ filter.js - рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП
тФВ services тФВ services.js - рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП
тФФтФАтФА stored тФВ рдореЙрдбреНрдпреВрд▓ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдХрд╛рдЗрдпрд╛рдВ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ
тФВ is тФВ friends.js - рдпрд╣рд╛рдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ - / рдорд┐рддреНрд░ рдкреГрд╖реНрда рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ, рдирд┐рд░реНрджреЗрд╢, рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЙрдбреНрдпреВрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда ...
рдпрд╛рдиреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдореЙрдбреНрдпреВрд▓ рдХреЗ 2 рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ:
- рд╡реИрд╢реНрд╡рд┐рдХ - рдирд┐рд░реНрджреЗрд╢реЛрдВ, рдлрд┐рд▓реНрдЯрд░, рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
- рдЖрд╡рд╢реНрдпрдХ - рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдирд┐рд░реНрджреЗрд╢, рдлрд┐рд▓реНрдЯрд░, рд╕рд░реНрд╡рд┐рд╕рд┐рдХреНрд╕ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕ рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдпрд╣ рд╕рдм, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ ... рд╣рд░ рдХреЛрдИ рдЕрдкрдиреА рджрд┐рд▓ рдХреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рдореБрдЭреЗ рдЕрдВрддрд╣реАрди рдЫреЛрдЯреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдореЗрдВ рдЕрдЪрд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рд╕реЗ рдиреВрдбрд▓реНрд╕ рдореЗрдВ рдбреВрдмрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╖рдп рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
layout.ejs <html ng-app="angularfb"> <head> <title>Facebook app</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="/static/css/style.css"> <link rel="stylesheet" href="/static/bootstrap/dist/css/bootstrap.css"> <link rel="stylesheet" href="/static/bootstrap/dist/css/bootstrap-theme.css"> <link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css"> <link href='http://fonts.googleapis.com/css?family=Domine' rel='stylesheet' type='text/css'> <style type="text/css"> [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; } </style> <script type="text/javascript"> // , Facebook API FB_APP_NAME = '<%= appName %>'; FB_APP_ID = '<%= appId %>' ; FB_APP_URL = '<%= appUrl %>'; FB_SCOPE = '<%= scope %>'; </script> </head> <body ng-class="{'page-loader': !$root.user}"> <div ng-if="$root.user"> <%- include navigation %> <%- body %> <%- include footer %> </div> <div ng-if="!$root.user" ng-cloak> <h2 class="text-center" ng-if="!auth.status"> <i class="icon-spin icon-spinner"></i> Loading... </h2> <a ng-if="auth.status && auth.status != 'connected'" class="fb-btn" ng-click="login()"></a> </div> </body> <script src="//connect.facebook.net/en_US/all.js"></script> <script src="/static/jquery/jquery.min.js"></script> <script src="/static/bootstrap/dist/js/bootstrap.min.js"></script> <script src="/static/underscore/underscore-min.js"></script> <script src="/static/angular/angular.js"></script> <script src="/static/angular-resource/angular-resource.min.js"></script> <script src="/static/angular-route/angular-route.min.js"></script> <script src="/static/js/services.js?<%= random %>"></script> <script src="/static/js/filters.js?<%= random %>"></script> <script src="/static/js/controllers.js?<%= random %>"></script> <script src="/static/js/directives.js?<%= random %>"></script> <script src="/static/js/modules/friends.js?<%= random %>"></script> <script src="/static/js/application.js?<%= random %>"></script> </html>
application.js (function() { 'use strict'; angular.module('angularfb', [ 'ngRoute', 'ngResource', 'angularfb.filters', 'angularfb.controllers', 'angularfb.services', 'angularfb.directives', 'angularfb.friends' ]) .config([ '$routeProvider', '$locationProvider', function($routeProvider, $locationProvider){ $locationProvider.html5Mode(true); $routeProvider .when('/', { templateUrl: '/partials/homepage', controller: 'HomePageCtrl' }) .when('/logout', { resolve: [ '$rootScope', 'API', '$location', function($rootScope, API, $location){ API.logout(function(){ console.log('Logout... redirecting...'); $location.path('/') $rootScope.$apply(); }); }] }) .otherwise(); } ]) .run(['$rootScope', '$location', 'API', function($rootScope, $location, API){ FB.init({ appId : FB_APP_ID, channelUrl : FB_APP_URL, status : true, xfbml : true, oauth : true }); console.log('RUN!');
services.js (function(){ 'use strict'; angular.module('angularfb.services', []) .factory("API", [ '$rootScope', '$q', '$location', '$exceptionHandler', function($rootScope, $q, $location, $exceptionHandler){ return { me: function(){ var def = $q.defer(); FB.api('/me', function(response){ def.resolve($rootScope.user = response);
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ API рд╕реЗрд╡рд╛ рдореЗрдВ рдРрд╕реА рдмрд╛рдЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдбрд╛рдВрдЯреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдХреНрд╕реЗрд╕рдХреЙрд▓рдмреИрдХ, рдПрд░рд░рдХрд▓рдмреИрдХ рдФрд░ _рдкреНрд░реЛрд╕реЗрд╕рдЕрде-рд░рд┐рдкреНрд░рд╕рди, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдмрд╛рдЗрдХ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдереЛрдбрд╝рд╛ рдвреЗрд░ рд▓рдЧрд╛ ... рдЙрд╕рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдХрд╛рдо рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдлреЗрд╕рдмреБрдХ рд▓реЙрдЧрд┐рди
рд▓реЗрдХрд┐рди рдлреЗрд╕рдмреБрдХ рдХрд╛ рдХреНрдпрд╛? рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рдкрд╛рда рдореЗрдВ рдХрдИ рдмрд╛рд░, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ ... рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рджреЛрд╖ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред
рддреЛ рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рд░рдЦрддреЗ рд╣реИрдВ?
рдЖрдЗрдП рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рднрд╛рдЧреЛрдВ рдореЗрдВ рдХрд░реЗрдВ:
рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $ root.user рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп 'рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ ..' рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ $ root.auth рдкрд╣рд▓реЗ рд╣реА рдЖ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреЗрдЯрд╕! == 'рдХрдиреЗрдХреНрдЯреЗрдб' рд╣реИ, рддреЛ рд╣рдо "рдлреЗрд╕рдмреБрдХ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ" рдмрдЯрди рджрд┐рдЦрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯред рдЬреЗрдПрд╕ рддреБрд░рдВрдд рдПрдХ рд╣реЗрдбрд░, рдлреБрдЯрд░ рдФрд░ <рдПрдирдЬреА-рд╡реНрдпреВ> рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдХреЛ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ рдФрд░ рд▓реЙрдЧрд┐рди рдмрдЯрди рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдЫрд┐рдкрд╛рдПрдВрдЧреЗред
рдЕрд░реЗ рд╣рд╛рдБ .., рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ:
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реЛ рдХрд┐ Application.js рдореЗрдВ, рдЬрдм $ рдорд╛рд░реНрдЧрдкреНрд░реЛрдкрд┐рдбрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛред рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕рднреАред рд╣рдореЗрдВ рдХрд╣реАрдВ рднреА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП / 404), рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдЯрд╛рдЗрдкреЛ рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд▓реНрджреА рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХреЗ рдФрд░ рдкреГрд╖реНрда рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдлреЗрдВрдХреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ , рдпрд╛ рд╣рдордиреЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рд░реНрдЧ (.where ()) рд╡рд░реНрдгрд┐рдд рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
$rootScope.$on('$routeChangeStart', function(event, next, current){ if ( !next.$$route ) next.templateUrl = '/partials/error'; })
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдЧрд▓рдд рд▓рд┐рдВрдХ рд╣реИ; рдпрд╣ рдкрде рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рджреЗрдЦрд╛, рдФрд░ URL рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░
- рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рдХреИрд╕реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдиреЗ рдПрдВрдЧреБрд▓рд░ рдХреЛ рд╕рд╛рдВрд╕ рд▓реЗрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рджреЗ рд░рд╣рд╛ рд╣реИ, рд╕реНрдереИрддрд┐рдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
- Anguar.js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЫреВрдирд╛
- рд╣рдореЗрдВ рдпрдХреАрди рдерд╛ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ) рдХрд┐ Angular'y рдХреЛ рди рдХреЗрд╡рд▓ 404 рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рдХреЗ рдмрд╛рдж рдпреВрдЬрд░ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдлреЗрд╕рдмреБрдХ рдХреЗ рдЬрд░рд┐рдП рднреА рдмрд╛рддрдЪреАрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдФрд░ рдЖрдк рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдпрд╣рд╛рдБ рд░рд╣рддреЗ рд╣реИрдВ:
-
http://angular-fb.herokuapp.com/]рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА, рддреЛ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЬреАрдердм рдХрд╛ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред
рдЬреЛ рднреА рдкрдврд╝реЗ рдЙрд╕рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред
UPD: рдлреЗрд╕рдмреБрдХ рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж
рддреБрд▓реЛрд╡_рд▓реЗрдХреНрд╕