Angular js: element.val не работает в функции директивной ссылки

0

Я пытаюсь обновить значение scope.answers на событии изменения. но не способен к текущему измененному значению в функции связи.

директива

    function textControlDir()
    {
        return {
            transclude: true,
            restrict: 'E',
            require:'ngModel',
            /*scope: {
                queObj: '=',
                selectedAns: '='
                },*/
            template: '<div class="form-group">\n\
<label for="{{queObj._attributeName}}" class="col-sm-5 control-label">{{queObj._text}}</label>\n\
<div class="col-sm-6"><input type="text" name="{{name}}" class="form-control" id="{{id}}" value="{{selectedAns}}"></div>\n\
</div>'
            ,
            link: function (scope, element, attrs,ngModel)
            {
                var queObj = scope.que.QuestionData;
                scope.queObj = scope.que.QuestionData; 
                scope.name = queObj._attributeName;
                scope.id = queObj._attributeName;
                var selectedAns = '';
                if(scope.answers)
                {
                   selectedAns = scope.answers[scope.name];
                }
                if(selectedAns && selectedAns != '')
                {
                    scope.selectedAns = selectedAns;
                }
                else
                {
                    scope.selectedAns = scope.queObj._pageAttributes.defaultValue;
                }

                element.bind('change',function(){
                    scope.answers[scope.name] = document.getElementById(scope.id).value;//element.value();
                    console.log(scope.answers[scope.name]);
                    scope.$apply();
                })
            }
        };
    }

HTML

<div ng-repeat="que in questions[$state.current.name]">
                        <div ng-if="que.QuestionData._fieldType === 'text'" >
                            <text-control-dir data-que-obj="que.QuestionData" data-ng-model="answers[que.QuestionData._attributeName]"></text-control-dir>
                        {{answers[que.QuestionData._attributeName]}}
                        </div>  
                        <div ng-if="que.QuestionData._fieldType === 'select'" >
                            <select-control-dir data="que.QuestionData"></select-control-dir>
                        </div>
                        <div ng-if="que.QuestionData._fieldType === 'radio'" >
                            <radio-control-dir data="que.QuestionData"></radio-control-dir>
                        </div>
                        <div ng-if="que.QuestionData._fieldType === 'hidden' && que.QuestionData._attributeName != 'CBQ'" >
                            <hidden-control-dir data="que.QuestionData"></hidden-control-dir>
                        </div>
                    </div>

В $ scope.questions есть все вопросы, я петлю в index.html. для каждого вопроса я создаю вход. если $ scope.answers имеет значение для конкретного ввода, я показываю в поле ввода. это много работает. Теперь я хочу установить значение в ответах, если пользователь меняет что-либо в поле ввода.

Ниже код не работает директивы (element.val; дает неопределенный)

                element.bind('change',function(){
                scope.answers[scope.name] = document.getElementById(scope.id).value;//element.value();
                console.log(scope.answers[scope.name]);
                scope.$apply();
            })

1 ответ

1

Объект jqLite имеет метод val который необходимо вызвать:

scope.answers[scope.name] = element.val();
  • 0
    TypeError: element.value не является функцией
  • 0
    Извините, это val, который является функцией.
Показать ещё 5 комментариев

Ещё вопросы

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