validation.html 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title></title>
  5. <meta charset="utf-8">
  6. <script src="../../../dist/vue.js"></script>
  7. <style type="text/css">
  8. input:not(.valid) {
  9. outline-color: #f00;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div id="test">
  15. name: <input type="text" v-model="name | nameValidator" v-class="valid:validation.name" name="name">
  16. email: <input type="text" v-model="email | emailValidator" v-class="valid:validation.email" name="email">
  17. <a id="go" v-on="click:go">Go</a>
  18. <ul>
  19. <li class="user" v-repeat="users">
  20. {{name}} {{email}}
  21. </li>
  22. </ul>
  23. </div>
  24. <script>
  25. var RE = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  26. var test = new Vue({
  27. el: '#test',
  28. filters: {
  29. nameValidator: function (val) {
  30. this.validation.name = !!val
  31. return val
  32. },
  33. emailValidator: function (val) {
  34. this.validation.email = RE.test(val)
  35. return val
  36. }
  37. },
  38. data: {
  39. name: '',
  40. email: '',
  41. users: [],
  42. validation: {
  43. email: false,
  44. name: false
  45. }
  46. },
  47. computed: {
  48. isValid: function () {
  49. var valid = true
  50. for (var key in this.validation) {
  51. if (!this.validation[key]) {
  52. valid = false
  53. }
  54. }
  55. return valid
  56. }
  57. },
  58. methods: {
  59. go: function () {
  60. if (this.isValid) {
  61. this.users.push({
  62. name: this.name,
  63. email: this.email
  64. })
  65. }
  66. }
  67. }
  68. })
  69. </script>
  70. </body>
  71. </html>