Angular JS: преобразование числа в Word не работает

0

Основная цель: в поле ввода число должно быть преобразовано в слова. Теперь он просто показывает номер в текстовом поле, а не конвертирует.
HTML:

<div ng-app="app" ng-controller="myCtrl">
  <span ng-init="W_cst='<?php echo $Cex; ?>'">{{W_cst | words}}</span>
</div>

PHP:

<?php
$cex=125;

?>

Угловой JS:

<script>
var app = angular.module('app',[]);
app.controller('myCtrl',function($scope){
$scope.cst=function(){
       var t;
       t=100;
       return t*0.125;
    }
    });
app.filter('words', function() {
  function isInteger(x) {
        return x % 1 === 0;
    }


  return function(value) {
    if (value && isInteger(value))
      return  toWords(value);

    return value;
  };

});


var th = ['','thousand','million', 'billion','trillion'];
var dg = ['zero','one','two','three','four', 'five','six','seven','eight','nine']; 
var tn = ['ten','eleven','twelve','thirteen', 'fourteen','fifteen','sixteen', 'seventeen','eighteen','nineteen'];
var tw = ['twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety']; 


function toWords(s)
{  
    s = s.toString(); 
    s = s.replace(/[\, ]/g,''); 
    if (s != parseFloat(s)) return 'not a number'; 
    var x = s.indexOf('.'); 
    if (x == -1) x = s.length; 
    if (x > 15) return 'too big'; 
    var n = s.split(''); 
    var str = ''; 
    var sk = 0; 
    for (var i=0; i < x; i++) 
    {
        if ((x-i)%3==2) 
        {
            if (n[i] == '1') 
            {
                str += tn[Number(n[i+1])] + ' '; 
                i++; 
                sk=1;
            }
            else if (n[i]!=0) 
            {
                str += tw[n[i]-2] + ' ';
                sk=1;
            }
        }
        else if (n[i]!=0) 
        {
            str += dg[n[i]] +' '; 
            if ((x-i)%3==0) str += 'hundred ';
            sk=1;
        }


        if ((x-i)%3==1)
        {
            if (sk) str += th[(x-i-1)/3] + ' ';
            sk=0;
        }
    }
    if (x != s.length)
    {
        var y = s.length; 
        str += 'point '; 
        for (var i=x+1; i<y; i++) str += dg[n[i]] +' ';
    }
    return str.replace(/\s+/g,' ');
}

window.toWords = toWords;
</script>

Расскажите, пожалуйста, где я ошибаюсь. Заранее спасибо.

  • 0
    Я могу запустить ваш код без проблем, смотрите ссылку plnkr.co/edit/Hp8hbYNx99FYOvXkteqO?p=preview
  • 0
    @ JeetendraChauhan. Да. Он работает, если вы присвоили значение функции Init, но не работает, когда переменная PHP назначена функции Init. Она просто показывает число.
Показать ещё 1 комментарий
Теги:

1 ответ

0

Это не правильное использование значения ng-value, эта директива должна использоваться для элементов <option> или input[radio]. См. Документы ng-value здесь: https://docs.angularjs.org/api/ng/directive/ngValue

Вам нужно будет использовать ng-model для хранения значения, введенного в текстовое поле где-нибудь. Затем вы можете использовать функцию для чтения этого значения, конвертировать ее в слова и возвращать строку.

Я создал здесь быстрый пример: https://jsfiddle.net/aza2xprp/

  • 0
    Я редактировал код сейчас. На самом деле, $ cex - это переменная PHP. Теперь он также показывает число, а не конвертирует.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню