Как привязать контроллер к директиве? - PullRequest
0 голосов
/ 09 июля 2019

Я использовал директиву для форматирования числа в валюту, она работала нормально, пока я не отделил шаблон от директивы. теперь не работает.

ДИРЕКТИВА

<number-input ng-model="vm.currencyVal" ng-change="vm.mychangeShovi()"
              ng-class="vm.currencyValMsg">
</number-input>

SCRIPT

angular.module('SvUtilities')
.directive('numberInput', function ($filter) {    
    return {
        require: 'ngModel',
        link: function (scope, elem, attrs, ngModelCtrl) {
            ngModelCtrl.$formatters.push(function (modelValue) {
                return setDisplayNumber(modelValue, true);
            });
            elem.bind('keyup focus', function () {
                setDisplayNumber(elem.val());
            });

            function setDisplayNumber(val, formatter) {
                var valStr, displayValue;
                if (typeof val === 'undefined') {
                    return null;
                }
                valStr = val.toString();
                displayValue = valStr.replace(/,/g, '').replace(/[A-Za-z]/g, '');

                displayValue = parseFloat(displayValue);

                displayValue = (!isNaN(displayValue)) ? displayValue.toString() : '';



                // handle leading character -/0

                if (valStr.length === 1 && valStr[0] === '-') {

                    displayValue = valStr[0];

                } else if (valStr.length === 1 && valStr[0] === '0') {

                    displayValue = '';

                } else {

                    displayValue = $filter('number')(displayValue);

                }





                if (attrs.positive && displayValue[0] === '-') {

                    displayValue = displayValue.substring(1);

                }



                if (typeof formatter !== 'undefined') {

                    return (displayValue === '') ? 0 : displayValue;

                } else {

                    elem.val((displayValue === '0') ? '' : displayValue);

                }

            }



            function setModelNumber(val) {

                var modelNum = val.toString().replace(/,/g, '').replace(/[A-Za-z]/g, '');

                modelNum = parseFloat(modelNum);

                modelNum = (!isNaN(modelNum)) ? modelNum : 0;

                if (modelNum.toString().indexOf('.') !== -1) {

                    modelNum = Math.round((modelNum + 0.00001) * 100) / 100;

                }

                if (attrs.positive) {

                    modelNum = Math.abs(modelNum);

                }

                return modelNum;

            }

        },

        restrict: "E",

        replace: true,

        templateUrl: "../svAngularLib/modules/utilities/directives/currencyDir.html",

        scope: {

            cssColor: '=',

            onChange: '&',

        },

        controllerAs: 'vm',

        bindToController: true

    };

});

ОБРАЗЕЦ

<div>
    <input maxlength="16" type='text' number-input ng-model="vm.currencyVal"
           value="vm.currencyVal" ng-change="" ng-class="" />    
    <span class="input-group-addon">₪</span>
</div>

При наборе чисел следует добавить разделители запятых, также я хочу добавить к нему некоторую функцию (ng-change) или свойства (класс CSS)

1 Ответ

0 голосов
/ 10 июля 2019

В вашей директиве отсутствует свойство controller:

app.controller('SomeController', function () {
  ...
});

app.directive('directiveName', function () {
  return {
    ...
    controller: 'SomeController',
    ...
  };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...