Kod arahan adalah seperti berikut:
var regex = /[\u4e00-\u9fa5\u3400-\u4db5\ue000-\uf8ff]/;
app.directive("ifHanzi", function () {
return {
restrict: "A",
scope:true,
require: "ngModel",
link: function (scope, ele, attrs, ngModelController) {
ngModelController.$parsers.unshift(function (input) {
if (regex.test(input)) {
ngModelController.$setValidity('ifHanzi', true);
} else {
ngModelController.$setValidity('ifHanzi', false);
}
});
}
}
});
Kod html adalah seperti berikut:
<form name="iForm" ng-submit="Search(Input)">
<p class="input-group">
<input type="text" class="form-control" ng-model="Input" name="inputText" if-hanzi>
<button class="btn btn-primary" type="submit>查询</button>
</p>
<span ng-show="iForm.inputText.$error.ifHanzi">提示:只能输入汉字进行查询!</span>
</form>
Kod pengawal:
app.controller('testCtrl',['$scope',function($scope){
$scope.Search=function(Input){
console.log(Input);//使用了表单验证指令后,Input就成了undefined
}
}]);
Pengesahan boleh dilaksanakan seperti biasa, iaitu, selagi saya menambah arahan "ifHanzi" yang ditulis oleh saya sendiri, kandungan borang yang dihantar tidak boleh diperolehi dalam pengawal dan menjadi tidak ditentukan Adakah arahan saya ditulis salah atau tidak ada yang lain? Jika saya tidak perasan apa-apa, saya harap pelajar boleh memberi saya beberapa petunjuk.
Hanya keluarkan skop = benar dalam arahan Anda menggunakan skop bebas Asrama terputus, jadi anda perlu menggunakan telefon bimbit anda...
Dikemas kini: 2015-12-13
1. Pertama sekali, kerana apa yang anda
require
adalah arahan, iaitu,ngModel
, dan arahan ini tidak mempunyai skop pengasingan, jika anda menetapkanscope = true
, ia akan menyebabkan dalamanngModel
tidak dapat mengemas kini luaran .ngModel
Ini adalah perkara utama yang membawa kepada masalah di atas. Jadi hanya alih keluar pilihan konfigurasi ini. 2. Kaedah fungsi yang anda hantar ketidak mengembalikan hasil selepas mengesahkan
ngModel.$parsers
, yang mengakibatkan nilai pada paparan tidak dihantar kepada model. Ia boleh diubah seperti berikut:ifHanzi
Ini adalah punca kedua masalah.
Semoga ini membantu.