Я создал директиву для элементов управления формой [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>
У вас нет доступа к $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()
ограничен только для поиска только тегов.
Просто увидел, что у вашей области нет свойства answers
. Так что это не сработает.
$scope
из списка параметров ссылки и используйте вместо этогоscope
. Подробнее здесьscope: {queObj: '='}
section ...