2017-10-25 14 views
0

にNG-バインドHTMLのドロップダウン値を取得することはできません私はjqueryのでこれを行うことができますが、私はangularjsを学びたいと思っています。私は<strong>Angularjs</strong>に新しいngのクリック機能

私はng-bind-htmlを使ってドロップダウンの値を取得し、その値をng-bind-htmlに更新していましたが、うまくいきました。 しかし、私はドロップダウンから値を選択し、コンソールログでそれがnullとして表示されます。

ハードコード値でドロップダウンを更新して値を選択すると、正しくログに記録されます。

HTMLコード:

<div ng-app="myApp"> 
<div ng-controller="addComplaintCtrl"> 
<select class="form-control" id="product_name" name="product_name" ng-model="product_name" ng-bind-html="pdl"> 
    <!--<option value="">-Select-</option> 
    <option value='00'>Other</option>--> 
    </select> 
    <input type="button" class="btn btn-primary btn-block" ng-click="complaintSubmitEvent();" value="Submit Complaint"> 
</div> 

</div> 

角度コード:以下

<script> 
    var app = angular.module('myApp',['ngSanitize']); 

    app.controller("addComplaintCtrl",function($scope,$sce){ 

    $scope.pdl=$sce.trustAsHtml('<option value="">-Select-</option><option value="Sales" >Sales</option>'); 

    $scope.complaintSubmitEvent=function(){ 
     //alert(0); 
     console.log($scope.product_name); 

    } 

    }) 
    </script> 

jsfiddleリンクです。あなたはng-bind-htmlがちょうど今することができます、その仕事

を行った後

app.directive('compile',function($compile, $timeout){ 
    return{ 
     restrict:'A', 
     link: function(scope,elem,attrs){ 
      $timeout(function(){     
       $compile(elem.contents())(scope);  
      }); 
     }   
    }; 
}); 

$timeoutのようなものは、機能をコンパイルし実行するために使用されるディレクティブを作成することができますng-bind-htmlによって行われた変更をコンパイルする必要があり ng-bind-html

+0

@Satpal plsはjsfiddleリンクをご確認ください。もしまだここでコードを見たいのであれば、私は置くことができます。 –

+0

今、コードpls check @Satpal –

答えて

1

selectの属性としてng-bind-htmlでコンパイルするだけです。

<select class="form-control" id="product_name" name="product_name" ng-model="product_name" ng-bind-html="pdl" compile > 

Working fiddle

+0

に感謝@jitenderを追加しました。だから、もし私がng-bind-htmlを使っているなら、コードをコンパイルする必要がありますか? –

+1

動的に作成された要素をコンパイルして、角度に関する情報を知る必要があります。最初はangelは 'ng-bind-html'で後で追加されたオプションについては知らないので、角度について知らせる必要があります。 – jitender

+0

私のメインコードでは動作しません。これは$ timeoutと関係があります。コンテンツの読み込みに少し時間がかかる –

0

あなたがng-bind-htmlを使用したくない場合にも、動的にng-repeatを使用してselectoptionsを追加することができます。ここでは、作業コードは次のとおりです。

<div ng-app="myApp"> 
<div ng-controller="addComplaintCtrl"> 
<select class="form-control" id="product_name" name="product_name" ng-model="product_name"> 
     <option ng-repeat="d in dropdownData" value="{{d.value}}">{{d.name}}</option> 
</select> 
<input type="button" class="btn btn-primary btn-block" ng-click="complaintSubmitEvent();" value="Submit Complaint"> 
</div>  
</div> 

<script> 
    var app = angular.module('myApp',['ngSanitize']); 

    app.controller("addComplaintCtrl",function($scope,$sce){ 
    $scope.dropdownData = [{name:'-select-', value:''},{name: 'sales', value:'sales'}]; 

    $scope.complaintSubmitEvent=function(){ 
     //alert(0); 
     console.log($scope.product_name); 

    } 
}); 
</script> 

Fiddle

関連する問題