Как обновить значение $ scope для директивы

0

Я творчески управляю динамически в цикле. где каждое каждое имя ввода создается динамически. В этом же случае я хочу обновить значение области в соответствии с вопросом. $ имя объекта объекта следует динамически. например $ scope.answers.xxx, где xxx - это имя вопроса.
$ scope.question имеют все вопросы
и хотите поддерживать ответы в $ scope.answers.

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

function textControlDir()
{
    return {
        transclude: true,
        restrict: 'E',
        /*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)
        {
            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;
            } 
        }
    };
}

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" ></text-control-dir>
    </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>

Созданный plunker для полного кода http://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview

  • 0
    Почему вы хотите так много директив? чего ты хочешь добиться?
  • 0
    Я создал только четыре директивы. HTML я создаю цикл. Есть много входов. так создаваемые вопросы задаются и зацикливаются. Пожалуйста, посмотрите плункер.
Показать ещё 6 комментариев

2 ответа

1

Обновление масштаба из функции ссылок невозможно без scope.$apply ngModelController или ngModelController

<div ng-repeat="que in questions[$state.current.name]">
    <div ng-if="que.QuestionData._fieldType === 'text'" >
        <input type="text" data-ng-model="que.QuestionData.Answer">
    </div>  
</div>


var app = angular.module("app",[]);

var ctrlFn = function(){
$scope.questions = questions;\\assign scope here

};
var ctrl = app.contoller('ctrl',ctrlFn);

ctrlFn.$inject = ['$scope'];
  • 0
    Директивы в поршне бывают разные. нг-модель не работает в этом. Можете ли вы попробовать с поршнем.
  • 0
    Директивы не нужны, в вашем случае ответ будет использоваться в качестве модели ввода, если ответ вообще присутствует, значение будет заполнено автоматически
Показать ещё 4 комментария
0

Использование:

$scope.answers[questionName] = data;
  • 0
    $scope недоступен в функции ссылки директивы.
  • 0
    Я предъявляю иск родительскому объему в директиве, пожалуйста, проверьте plunker.

Ещё вопросы

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