2016-07-22 78 views
0

我试图更新change.notify.asc关于变化事件的值。但不能在当前链接功能中更改值。Angular js:element.val在指令链接函数中不起作用

指令

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

jqLite对象有val方法你需要调用:

scope.answers[scope.name] = element.val(); 
+0

类型错误:element.value是不是功能 –

+0

对不起,这是一个函数val。 – dfsq

+0

这个打印函数(arg1,arg2)在我上面的代码中我怎样才能得到输入框值 –

相关问题