입력 유형 = 텍스트 필드를 사용하여 숫자, 빼기 기호 및 소수만 허용하고 Angular에서 더 이상 허용하는 방법

Peter The Angular Dude

간단히 말해서 요점은 각진 텍스트 상자가 두 개 있습니다.

여기있어:

<div data-ng-controller="customValidationAndNbrsCheckController">
     <label class="input">
        <number-only-input  placeholder="Latitude" input-value="wksLat.number" input-name="wksLat.name" />
     </label>
     <label>
        <number-only-input  placeholder="Longitude" input-value="wksLon.number" input-name="wksLon.name" />
     </label>     
</div>

내 지시는 다음과 같습니다. UPDATE : PROBLEM SOLVED ... 여기 문제를 해결하는 정확한 변경 사항을 보여주는 바이올린이 있습니다. 읽어 주셔서 감사합니다. http://jsfiddle.net/vfsHX/

//Numbers only function
angular
    .module("isNumber", [])
    .directive('isNumber', function () {
    return {
        require: 'ngModel',
        link: function (scope) {    
            scope.$watch('wksLat.number', function(newValue,oldValue) {
                var arr = String(newValue).split("");
                if (arr.length === 0) return;
                if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.' )) return;
                if (arr.length === 2 && newValue === '-.') return;
                if (isNaN(newValue)) {
                    scope.wksLat.number = oldValue;
                }
            });
            scope.$watch('wksLon.number', function (newValue, oldValue) {
                var arr = String(newValue).split("");
                if (arr.length === 0) return;
                if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.')) return;
                if (arr.length === 2 && newValue === '-.') return;
                if (isNaN(newValue)) {
                    scope.wksLon.number = oldValue;
                }
            });
        }
    };
});

내 서비스는 다음과 같습니다.

(function (app) {
debugger;
var customValidationAndNbrsService = function () {

    var customValidationAndNbrsServiceFactory = {};

    customValidationAndNbrsServiceFactory.settings = new mainApp.Models.Settings();

    customValidationAndNbrsServiceFactory.getSettings = function () {
        return customValidationAndNbrsServiceFactory.settings;
    };

    return customValidationAndNbrsServiceFactory;
};

app.factory("customValidationAndNbrsService", customValidationAndNbrsService);

}(angular.module("mainApp")));

이것은 내가 여기 스택에서 찾은 예에서 나온 것입니다.

문제 : 잘 작동하지만 ...

  1. 텍스트 상자의 값은 숫자 "1"로 시작합니다. 왜?
  2. 텍스트 상자는 숫자가 포함 된 대시, 십진수를 허용하지 않지만 영문자는 허용하지 않습니다. 좋은.
  3. 이것은 maxlength = '50 '로 작동하는 50 자로 제한된 LAT / LON 데이터를위한 것입니다.
  4. inputValue 및 inputName 끝에있는 "="기호는 무엇을 의미합니까? 그게 표준인가요? "0"으로 변경하면 텍스트 상자에 "1"이 표시되는 이유라고 생각하면 Chrome의 디버거가 코드 오류를 표시하기 때문입니다.

질문 : LAT LON을 DD : MM : SS가 아닌 십진수로 입력하므로 대시와 소수를 "허용"하도록 코드를 수정하려면 어떻게해야합니까?

가능한 입력은 다음과 같습니다. 25.2223332 LAT 및 -45.685464 LON

따라서 중재자가이 질문을 삭제하지 않기를 바랍니다. 이 사이트는 유효하며 "내 코드 수정"의 도움이 필요합니다.

감사합니다, 여러분.

Maurica

1. 출처 input-value="wksLon.number"

2. 정규식에 값을 일치

js

scope.$watch('inputValue', function (newValue, oldValue) {
  var arr = String(newValue).split("");
  if (arr.length === 0) return;
  if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.')) return;
  if (arr.length === 2 && newValue === '-.') return;
  if (isNaN(newValue)) {
    scope.inputValue = oldValue;
  }
});

아마도 RegEx를 사용하여 설정으로 변경해야합니다.

그런 것

scope.$watch('inputValue', function (newValue, oldValue) {
  var myRegex = /^(-)?\d+(.\d+)$/
  if (!myRegex.test(newValue) || newValue.length > 50) {
    scope.inputValue = oldValue
  }
});

3. 2 x 3 확장 length > 50

4. 동일한 이름에 대한 데이터 바인딩입니다.

<number-only-input  placeholder="Longitude" input-value="wksLon.number" input-name="wksLon.name" />

위의 요소 input-value 및 input-name은 동일한 이름으로 바인딩됩니다.

scope: {
        inputValue: '=',
        inputName: '='
    },

그러나 다른 것을 사용하려면 다음과 같이 할 수 있습니다.

scope: {
        Value: '=inputValue',
        Name: '=inputName'
    },

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관