Angular Js, как получить доступ к $ scope в директиве

0

Я создал директиву для элементов управления формой [input, select и radio]. Каждый вход имеет значение по умолчанию, если $ scope.answers имеет это входное значение, то это значение должно отображаться в поле ввода.

Ниже код не работает из ссылки fucntion

if($scope.answers.PC && $scope.answers.PC != '')
                {
                    element.val = $scope.answers.PC;
                }

Директивная функция

function textControlDir()
    {
        return {
            transclude: true,
            restrict: 'E',
            scope: {
                queObj: '=',
                },
            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="{{queObj._attributeName}}" class="form-control" id="{{queObj._attributeName}}" value="{{queObj._pageAttributes.defaultValue}}"></div>\n\
</div>'
            ,
            link: function ($scope,scope, element, attrs)
            {
                if($scope.answers.PC && $scope.answers.PC != '')
                {
                    element.val = $scope.answers.PC;
                }
                console.log($scope);
            }
        };
    }

HTML

<text-control-dir data-que-obj="que.QuestionData"></text-control-dir>
  • 2
    Удалите $scope из списка параметров ссылки и используйте вместо этого scope . Подробнее здесь
  • 0
    вы не можете получить доступ к $ scope внутри директивы ... вот почему у нее есть scope: {queObj: '='} section ...
Показать ещё 3 комментария

1 ответ

0
Лучший ответ

У вас нет доступа к $scope в директивах напрямую, но поскольку у вас есть функция link вы можете получить доступ к scope соответствующей директивы. Однако вы не можете устанавливать такие значения, как вы делаете в настоящее время .val - неправильный способ установки:

link: function(scope, element, attrs) {
    if (scope.answers && scope.answers !== undefined) {
      element.find('input').val(scope.answers.PC); // <---this is the way to set value
    }else{
      element.find('input').val('No vales found!!!');
    }
  }

Где element - это элемент-оболочка div и вы должны .find('input') 1 вводить текст внутри него.

1. Если библиотека jQuery не включена до углового, угловое будет использовать jqLite и где .find() ограничен только для поиска только тегов.

Plnkr


Просто увидел, что у вашей области нет свойства answers. Так что это не сработает.

Ещё вопросы

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