2017-12-17 14 views
1

ng-clickイベントを使用して、追加されたhtmlの作業からボタンを作成しようとしています。私はここでいくつかの解決策を見てきましたが、私にとってはうまくいかないようです。おそらく、私は別の状況があるか、それを正しく使うことができなかったでしょう。私のコードは以下の通りです:動的に追加されたhtmlタグのボタンがng-clickを呼び出さない

fileMaintenanceCtrl.js

/// <reference path="../angular.js" /> 

angular.module('adminApp') 
.controller('fileMaintenance', [ 
    '$scope', '$http', '$sce', function ($scope, $http, $sce, $compile) { 

     // Adding Client 

     $scope.addNewClient = function() { 
      debugger; 
      alert($scope.addClient.CompanyName); 
     } 

     // End of adding client 


// This is how I get the html template    
$scope.addClient = function() { 
       $http.get('/FileMaintenance/AddClient') 
        .then(function(response) { 
          var divTemplate = response.data; 
          var element = angular.element(document.getElementById('btnAddCompany')); 
          console.log(element.toString()); 
          element.append(divTemplate); 
          $compile(element)($scope); 
         }, 
         function(error) { 
          alert('An error occured in retrieving view. ' + error.message); 
         }); 
      }; 
     } 
    ]); 

addClient.cshtml

<h1 class="text-center text-info">Add Client</h1> 
<br /> 
<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 

     <form role="form" name="formAddClient"> 
      <div class="form-group"> 
       <label for="inputCompany">Company</label> 
       <input id="inputCompany" type="text" 
         class="form-control" ng-model="addClient.CompanyName" name="CompanyName"/> 
      </div> 

      <div class="form-group"> 
       <label for="inputContactPerson">Contact Person</label> 
       <input id="inputContactPerson" type="text" 
         class="form-control" ng-model="addClient.contact_person" name="ContactPerson"/> 
      </div> 

      <div class="form-group"> 
       <label for="inputEmailAddress">Email Address</label> 
       <input id="inputEmailAddress" type="text" 
         class="form-control" ng-model="addClient.email_address" name="EmailAddress"/> 
      </div> 
     </form> 

     <input type="button" id="btnAddCompany" class="btn btn-success" 
       value="Add Company" ng-click="addNewClient()"/> 

    </div> 
</div> 

fileMaintenance.cshtml < - 私はHTMLテンプレートを置く場所です

<div class="active tab-pane" id="file_maintenance"> 
    <div> 
     <a href="javascript:void(0);" ng-click="addClient()">Add Client</a> 
    </div> 
    <br /> 
    <div id="file_maintenance_view_area"> 
     <div ng-bind-html="chosen_view"> 

     </div> 
    </div> 
</div> <!-- End of tab file_maintenance --> 

また、私はこのコードを試してみました:

$scope.addClient = function() { 
    $http.get('/FileMaintenance/AddClient') 
     .then(function(response) { 
      var divTemplate = response.data; 
      var temp = $compile(divTemplate)($scope); 
      var ele = angular.element(document.getElementById('btnAddCompany')).append(temp); 
     }, 
      function(error) { 
       alert('An error occured in retrieving view. ' + error.message); 
      }); 
}; 

を私は、このコードのようにそれを行う場合には、私も私のテンプレートのHTMLを表示するために取得することはできません。

+0

私は正確な答えはありませんが、コントローラがDOMを直接変更することは大きなノー・ノーです。カスタムディレクティブが必要な場合があります。 –

+0

はい。私は実際にこの問題を指摘しました。私は角度が新しく、私はそれを複雑にしたくありません。私は現在プログラムを実行することができません。 –

+0

'ng-if'を使ってHTMLコンテンツを動的にインクルード/除外し、それをコントローラにバインドするのはなぜですか?私は、ディレクティブは少し醜いことができ、あなたの最初の選択ではないかもしれないことに同意します。 –

答えて

1

あなたは$compile後スニペットが注入されなければならない:

.then(function(response) { 
    var divTemplate = response.data; 
    var element = angular.element(document.getElementById('btnAddCompany')); 
    element.append(divTemplate); 
    $compile(element)($scope); 
}, 

append()のみ解析され、DOMに挿入されている文字列を追加。 $scopeに行ったリンクは考慮されていません。

+0

提案した内容を反映するようにコードを更新しました。コンパイルされた要素をメインビューに配置するにはどうすればよいですか?私が前にやったやり方は、変数にHTMLコードを置き、変数をメインビューにバインドすることでした。 –

+0

その変数は '$ scope.chosen_view'です –

+0

@stackquestions、私はあなたが「メインビュー」と言っていることに従いませんか?上記の簡略化を示すplunkrがあります - > ** http://plnkr.co/edit/nAtJV6hSz512uKorAxkD?p = preview ** – davidkonrad

関連する問題