validation.html 1.8 KB

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