AngularJS рдПрдХ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА JS рдЪреМрдЦрдЯреЗ рд╣реИ рдЬреЛ рдЬрдЯрд┐рд▓ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЯреАрдо рдПрдХ рдЬрдЯрд┐рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ AngularJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рдордиреЗ рдПрдХ рдЕрдЪреНрдЫреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрдореА рдорд╣рд╕реВрд╕ рдХреА рдЬреЛ рд╕рдорд╛рди рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдбреЗрдЯрд╛рдЗрдо рдкрд┐рдХрд░, рд╕рд┐рд▓реЗрдХреНрдЯ, рдорд▓реНрдЯреАрдкрд▓ рд╕рд┐рд▓реЗрдХреНрдЯ рд╡рдЧреИрд░рд╣ред рдмреЗрд╢рдХ, рд╣рдо
Angular UI рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рдереЗ, рд▓реЗрдХрд┐рди AngularUI рдиреЗ рдХреБрдЫ рд╡рд┐рдЧреЗрдЯреНрд╕ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдХрд░рд╛рдП рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдереАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд░реЗрд▓ рдлреЙрд░реНрдо рдмрд┐рд▓реНрдбрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ред рдлреЙрд░реНрдо рдмрд┐рд▓реНрдбрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдорд╛рд░реНрдХрдЕрдк рдФрд░ рдПрд░рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдкреАрдврд╝реА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдлреЙрд░реНрдо рдХреЛ рдбрд┐рд╕реНрдХреНрд░рд╛рдЗрдмрд▓реА рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдлреЙрд░реНрдорд╕реНрдЯреИрдореНрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп рдерд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдлреЙрд░реНрдо рдмрд┐рд▓реНрдбрд░ - рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪрддрдо рд╕реНрддрд░, рд░реВрдмреА рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд░ рд░реВрдмреА рд╕реЗ рдлрд╛рд░реНрдо рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ;
- рдкреНрд░рдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдФрд░ рдорд╛рдирдХ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ 80% рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ;
- рдирдП рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдШрдЯрдХред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рд░рдЦреЗ рдЧрдП рдереЗ:
- рд╕рднреА рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ AngularJS рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
- AngularJS (ngModel, ngRequired ... рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди) рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдПрдХреАрдХрд░рдг;
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯрд╛рдЗрд▓ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рдеред
рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢
рдлреЙрд░реНрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдмреЛрд╡рд░ рдкреИрдХреЗрдЬ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
bower install angular-formstamp
рдлреЙрд░реНрдо рдмрд┐рд▓реНрдбрд░
AngularJS рдХреЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпреВрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рднреА, рдХреНрд╖реЗрддреНрд░ рдХреА рдЬрд╛рдБрдЪ рдкреВрд░реА рдХрд░рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдлреЙрд░реНрдо рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╣реЛрдВрдЧреЗ:
рдХреЛрдб <form class="form-horizontal" role="form" name="form" ng-app="form-demo"> <div class="form-group" ng-class="{'has-error': form.username.$invalid}"> <label for="username" class="col-sm-2 control-label">Username</label> <div class="col-sm-10"> <input type="text" class="form-control" id="username" placeholder="Username" required="required" ng-pattern="/awesome/" name="username" ng-model="username" /> <p class="alert alert-danger" ng-show='form.username.$error.pattern'> Username should be awesome </p> </div> </div> <div class="form-group" ng-class="{'has-error': form.email.$invalid}"> <label for="email" class="col-sm-2 control-label">Email</label> <div class="col-sm-10"> <input type="email" class="form-control" id="email" placeholder="Email" required="required" name="email" ng-model="email" /> <p class="alert alert-danger" ng-show='form.email.$error.email'> Email should be valid </p> </div> </div> <div class="form-group" ng-class="{'has-error': form.password.$invalid}"> <label for="password" class="col-sm-2 control-label">Password</label> <div class="col-sm-10"> <input type="password" class="form-control" id="password" placeholder="Password" required="required" name="password" ng-model="password" ng-minlength='6' /> <p class="alert alert-danger" ng-show='form.password.$error.minlength'> Password should be longer </p> </div> </div> <div class="form-group"> <label for="birthDate" class="col-sm-2 control-label">Birth Date</label> <div class="col-sm-10"> <input type="date" class="form-control" id="birthDate" placeholder="Birth Date" ng-model="birthDate" /> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">Sign up</button> </div> </div> </form>
рдкреНрд░рдкрддреНрд░ рдмрд┐рд▓реНрдбрд░ рдШрдЯрдХ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдлрд╝реЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
- рд╡рд╣ рдореЙрдбрд▓ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдлрд╝реЙрд░реНрдо рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ;
- рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛ рдлрд╝реЙрд░реНрдо рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИрдВ;
- рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдлрд╛рд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ред
рдкреНрд░рдкрддреНрд░ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреНрд░реБрдЯрд┐ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рдлрд╝реЙрд░реНрдо рдХреЛ рдмрд╣реБрдд рдХрдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<fs-form-for model="samurai"> <fieldset class="form-horizontal"> <fs-input as="text" name="username" required="" label="Name"></fs-input> <fs-input as="email" name="email" required="" label="Email"></fs-input> <fs-input as="password" name="password" required="" label="Email"></fs-input> <fs-input as="fs-date" name="birthdate" required="" label="Date of Birth"></fs-input> </fieldset> </fs-form-for>
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
fsFormFor
- рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдирд┐рд░реНрджреЗрд╢, model
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрд╕ model
рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ;fsInput
рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрд╛рд░реНрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:as
- рдлрд╛рд░реНрдо рддрддреНрд╡ рдХрд╛ рдкреНрд░рдХрд╛рд░;name
- рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо;label
- label
рдкрд╛рдаред
рдЕрдиреНрдп рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рдХреЗ
as
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛
as
рд╣реИред
рд╡рд┐рдЬреЗрдЯ рд╕реЗрдЯ
рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛, рдЖрдк рдорд╛рдирдХ рдкреНрд░рдкрддреНрд░ рддрддреНрд╡реЛрдВ рдХреЛ рдЙрддрдирд╛ рд╣реА рдХрдо рдпрд╛рдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдлрд┐рд▓рд╣рд╛рд▓, AngularJS рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХрдИ рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЬреЛ рд╣реИрдВ, рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ jQuery рд╡рд┐рдЬреЗрдЯреНрд╕ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИред FormStamp рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ AngularJS API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╡рд┐рдЧреЗрдЯреНрд╕ рд╣реИрдВ рдЬреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдордиреЗ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛:
- рджрд░реНрдЬ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░реЗрдВ;
- рдореБрдлреНрдд рдкрд╛рда (рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░реЗрдВ;
- рдкреНрд░рд╡реЗрд╢ рдХрд┐рдП рдЧрдП рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЧреБрдгрд╛;
- рдореБрдХреНрдд рдкрд╛рда (рдЯреИрдЧ рдЗрдирдкреБрдЯ) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЧреБрдгрд╛;
- рд░реЗрдбрд┐рдпреЛ рд╕рдореВрд╣;
- рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕рдореВрд╣;
- рддрд╛рд░реАрдЦ рдФрд░ / рдпрд╛ рд╕рдордп рдФрд░ рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЧреЗрдЯреНрд╕ред
рдПрдХ рдЪреБрдирд┐рдВрджрд╛ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ,
fsSelect
рд▓рд┐рдП
fsSelect
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢ рдЧреБрдг
freetext
,
items
,
ng-model
,
ng-required
,
ng-disabled
ред
freetext
рд╡рд┐рд╢реЗрд╖рддрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд) рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред
freetext=false
рд╡рд┐рдЬреЗрдЯ рдЪрдпрди рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдПрдХ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
freetext=true
рд╡рд┐рдЬреЗрдЯ рдПрдХ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
items
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреА рдХрд┐рд╕ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИред
freetext=false
рд╡рд┐рдХрд▓реНрдк рдпрд╛ рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
freetext=true
рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
ng-model
рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдорд╛рдирдХ
ngModel рдирд┐рд░реНрджреЗрд╢ рд╣реИред
ng-disabled
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдЬреЗрдЯ рдЕрдХреНрд╖рдо / рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╡рд┐рдХрд▓реНрдк
$scope.arrayOfOptions
рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИрдВред
$scope.arrayOfOptions
, рдЪрдпрдирд┐рдд рдСрдкреНрд╢рди
$scope.selectedOption
рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрд╖рдо / рд╕рдХреНрд╖рдо рд╕реНрдерд┐рддрд┐
$scope.flag
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
$scope.flag
, рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦреЗрдВ:
<div fs-select items=тАЭarrayOfOptionsтАЭ ng-disabled=тАЭflagтАЭ ng-model=тАЭselectedOptionтАЭ freetext=тАЭtrueтАЭ></div>
рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯреНрд╕ рдФрд░ рдлреЙрд░реНрдо рдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреЗрдЬ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рджрд┐рд╢рд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рд▓реЗрдЦрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛:
fsList
- рдорджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдЪрдпрди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;fsNullForm
- рдореВрд▓ рддрддреНрд╡ рд╕реЗ рдПрдирдХреЛрдореЙрдбрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рддрддреНрд╡ рддрддреНрд╡ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ;fsInput
- рдХреАрдмреЛрд░реНрдб рдИрд╡реЗрдВрдЯреНрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдФрд░ fsInput
рд╕рд░рд▓ fsInput
;fsCalendar
- рдХреИрд▓реЗрдВрдбрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рддрд┐рдерд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
fsList
рдФрд░
fsInput
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ
fsInput
ред
fsList
рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реВрдЪреА рдореЗрдВ
fsList
listInterface
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде
$scope
рдкрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
listInterface
рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВ:
selectedItem
- рд╡рд░реНрддрдорд╛рди рдЪрдпрдирд┐рдд рдореВрд▓реНрдпред рдХреЗрд╡рд▓ рдкрдврд╝реЗрдВonSelect(value)
- рдореВрд▓реНрдп рдЪрдпрди рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредmove(d)
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рддрддреНрд╡реЛрдВ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
HTML5 рд╕реЗ
audio
рдЯреИрдЧ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдПрдБ:
app.directive("demoAudio", function() { return { restrict: "E", scope: { track: '=' }, template: "<audio controls />", replace: true, link: function($scope, $element, $attrs) { return $scope.$watch('track', function(track) { $element.attr('src', track.stream_url + "?client_id=8399f2e0577e0acb4eee4d65d6c6cce6"); return $element.get(0).play(); }); } }; });
рдХрдиреЗрдХреНрдЯ рд╕рд╛рдЙрдВрдбрдХреНрд▓рд╛рдЙрдб рдПрд╕рдбреАрдХреЗ
<script src="http://connect.soundcloud.com/sdk.js"></script>
рдЕрдЧрд▓рд╛, рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдБ:
function ListDemoCtrl($scope) { // SoundCloud SDK SC.initialize({ client_id: '8399f2e0577e0acb4eee4d65d6c6cce6' }); // SoundCloud $scope.$watch('search', function () { SC.get('/tracks', { q: $scope.search, license: 'cc-by-sa' }, function(tracks) { $scope.$apply(function() { $scope.tracks = tracks }) }) }); $scope.search = 'bach'; $scope.tracks = []; // fsList $scope.move = function (d) { $scope.listInterface.move(d); }; // fsList $scope.listInterface = { onSelect: function (selectedItem) { $scope.select(selectedItem) } }; $scope.select = function(selectedItem) { $scope.selectedTrack = selectedItem || $scope.listInterface.selectedItem; }; }
рдФрд░ рдЖрд╡реЗрджрди рд╣реА:
<div ng-controller="ListDemoCtrl" style="postion: relative;"> <div class="row"> <div class="col-xs-7"> <input class="form-control" autofocus="1" fs-input fs-up="move(-1)" fs-down="move(1)" fs-enter="select()" ng-model="search"> <div fs-list="" items="tracks" class="no-popup"> <img src="{{ item.artwork_url }}" width="30" height="30"> {{item.title}} <small class="text-muted">{{item.genre}}</small> </div> </div> <div class="col-xs-5"> <demo-audio track="selectedTrack"></demo-audio> <pre style="margin-top: 20px;">Selected Item: {{ selectedTrack | json }}</pre> </div> </div> </div>
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдРрд╕рд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдорд┐рд▓рддрд╛ рд╣реИ:

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