Currently, the styles for validation messages are hosted in another component
Please use <md-colors></md-colors> in your main view to use colors.
This will be refactored.
| <template> | |
| <require from="./blurOnEnter"></require> | |
| <div> | |
| <md-input | |
| md-blur-on-enter="true" | |
| md-label="First Name" | |
| md-value.bind="firstName & validate:rules" | |
| > | |
| </md-input> | |
| <md-input | |
| md-blur-on-enter="true" | |
| md-label="Last Name" | |
| md-placeholder="Last Name" | |
| md-validate="true" | |
| md-validate-success="good" | |
| md-value.bind="lastName & validate:rules"> | |
| </md-input> | |
| <md-input | |
| md-blur-on-enter="true" | |
| md-label="Email" | |
| md-validate="true" | |
| md-validate-success="email valid" | |
| md-value.bind="email & validate:rules"> | |
| </md-input> | |
| <md-input | |
| md-blur-on-enter="true" | |
| md-label="Required without error text" | |
| md-show-errortext="false" | |
| md-value.bind="noErrorText & validate:rules"> | |
| </md-input> | |
| <md-input | |
| md-blur-on-enter="true" | |
| md-label="put some text here" | |
| md-value.bind="textareaValue & validate:rules" | |
| md-text-area="true"> | |
| </md-input> | |
| </div> | |
| <div style="margin-top: 15px;"> | |
| <button md-button click.delegate="validateModel()">validate</button> | |
| </div> | |
| <h5>${message}</h5> | |
| <ul style="margin-top: 15px;" show.bind="controller.errors.length"> | |
| <li repeat.for="error of controller.errors"> | |
| <a href="#" click.delegate="error.target.focus()"> | |
| ${error.message} | |
| </a> | |
| </li> | |
| </ul> | |
| </template> |
| import { inject, NewInstance } from 'aurelia-framework'; | |
| import { ValidationController, ValidationRules } from 'aurelia-validation'; | |
| import { MaterializeFormValidationRenderer } from 'aurelia-materialize-bridge'; | |
| @inject(NewInstance.of(ValidationController)) | |
| export class App { | |
| message = ''; | |
| firstName = ''; | |
| lastName = 'Doe'; | |
| email = ''; | |
| noErrorText = ''; | |
| textareaValue = ''; | |
| controller = null; | |
| validationRules = ValidationRules | |
| .ensure('firstName') | |
| .required() | |
| .ensure('lastName') | |
| .minLength(4) | |
| .ensure('email') | |
| .required() | |
| .withMessage('We need your email') | |
| .email() | |
| .ensure('noErrorText') | |
| .required() | |
| .ensure('textareaValue').displayName('Some text') | |
| .required() | |
| .on(this) | |
| .rules; | |
| constructor(controller: ValidationController) { | |
| this.controller = controller; | |
| this.controller.addRenderer(new MaterializeFormValidationRenderer()); | |
| } | |
| validateModel() { | |
| this.controller.validate().then(v => { | |
| if (v.valid) { | |
| this.message = 'All is good!'; | |
| } else { | |
| this.message = 'You have errors!'; | |
| } | |
| }); | |
| } | |
| onFocus() { | |
| console.log('focus'); | |
| } | |
| } |
| import {customAttribute, inject} from 'aurelia-framework'; | |
| @customAttribute('blur-on-enter') | |
| @inject(Element) | |
| export class BlurOnEnter { | |
| constructor(element) { | |
| this.element = element; | |
| this.handleKeyUp = this.handleKeyUp.bind(this); | |
| } | |
| attached() { | |
| this.element.addEventListener('keyup', this.handleKeyUp); | |
| } | |
| detached() { | |
| this.element.removeEventListener('keyup', this.handleKeyUp); | |
| } | |
| handleKeyUp(e) { | |
| if (e.keyCode === 13) { | |
| this.element.blur(); | |
| } | |
| } | |
| } |
| <!doctype html> | |
| <html> | |
| <head> | |
| <title>Aurelia</title> | |
| <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| </head> | |
| <body aurelia-app="main"> | |
| <h1>Loading...</h1> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.6/system.js"></script> | |
| <script src="https://rawgit.com/aurelia-ui-toolkits/aurelia-materialize-bundles/0.20.5/config2.js"></script> | |
| <script> | |
| System.import('aurelia-bootstrapper'); | |
| </script> | |
| </body> | |
| </html> |
| /******************************************************************************* | |
| * The following two lines enable async/await without using babel's | |
| * "runtime" transformer. Uncomment the lines if you intend to use async/await. | |
| * | |
| * More info here: https://github.com/jdanyow/aurelia-plunker/issues/2 | |
| */ | |
| //import regeneratorRuntime from 'babel-runtime/regenerator'; | |
| //window.regeneratorRuntime = regeneratorRuntime; | |
| /******************************************************************************/ | |
| import 'materialize'; | |
| export function configure(aurelia) { | |
| aurelia.use | |
| .standardConfiguration() | |
| .developmentLogging() | |
| .plugin('aurelia-materialize-bridge', bridge => bridge.useAll() ) | |
| .plugin('aurelia-validation'); | |
| aurelia.start().then(a => a.setRoot()); | |
| } |