2016-07-22 82 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)在我上面的代碼中我怎樣才能得到輸入框值 –

相關問題