Элемент Salessetce Lightning Input больше не работает после выпуска 18-го лета. - PullRequest
0 голосов
/ 28 мая 2018

Я использую приведенный ниже фрагмент кода для проверки правильности формата номера телефона, а затем пытаюсь установить отформатированное значение для текущего элемента ввода.Но после выпуска 18-го лета я не могу установить ввод с новым отформатированным значением.

TestApp

<aura:application extends="force:slds">    
   <lightning:input type="text" label="Num" aura:id="ele" onchange=" 
    {!c.changeNum}" />
 </aura:application>

Контроллер:

({
    changeNum : function(component, event, helper) {
       helper.changeNum(component, event);
    }
})

Помощник:

({
changeNum : function(component, event) {
    var element = event.getSource();
    var phonenumber = element.get("v.value");        
    if(phonenumber){                
            var updatedValue = phonenumber.replace(/-/g, "");
            if(/^\d{10}$/.test(updatedValue)){ 
                phonenumber = updatedValue.match(new RegExp('\\d{4}$|\\d{3}', 'g')).join("-");
            }
            else{
                var x = phonenumber.replace(/[^0-9._-]/g, "").replace(/ +/, " ");
                phonenumber = x;
               if(!/^[0-9-]+$/.test(phonenumber.slice(-1))){
                    phonenumber = phonenumber.slice(0, -1);
                }
            }
        }
    console.log(phonenumber);   
    element.set('v.value', phonenumber);
}
})

element.set не может обновить отформатированное значение.Элемент молниеносного ввода все еще может принимать алфавиты.

1 Ответ

0 голосов
/ 30 мая 2018

Мы можем решить проблему, используя Обещание

({
handleInputChange : function(component, event) {
    try {           
        var element = event.getSource();
        var inputValue = element.get("v.value");
        var formattedValue;
        var chkPattern = new Promise(
            function (resolve, reject) {
                if (inputValue) {
                    formattedValue = inputValue.replace(/[^0-9-]/g, "").replace(/ +/, " ");                        
                    resolve(formattedValue); // fulfilled
                } else {
                    var reason = new Error('kitten is not happy');
                    reject(reason); // reject
                }

            }
        );

        chkPattern.then(function (fulfilled) { 
            element.set('v.value', fulfilled);
        }).catch(function (error) {                
            console.log(error.message);                
        });
    } catch(e) {
        this.consoleLog(e.stack, true)
    }
}

})

...