2016-11-10 15 views
0

Я пытаюсь отобразить html в моем представлении, и я хочу вставить вызов функции внутри этого html, но не понимаю, как я могу это сделать. Вот мой JavaScript:Как вставить HTML вместе с функцией onclick в view в angularjs

 angular.forEach($scope.patients, function (patient) { 
     tableRow = tableRow + [ 
      '<div data-ng-click="popup("+patient+")">', 
       '<div class="name-container">+patient.name+</div>', 

      '</div>'].join(''); 
    }); 
    $scope.renderHTML =$sce.trustAsHtml(tableRow); 

    $scope.popup = function(patient) { 
    ... 

}; 

HTML:

<div data-ng-bind-html="renderHTML"> 
      </div> 

Можно ли добавить объект пациента в функции всплывающего(), используя этот путь?

ответ

0

HTML: $ Eval позволяет оценить различные угловые выражения

<div data-ng-bind-html="$eval(renderHTML)"> 
      </div> 

JS

Это может помочь вам,

angular.forEach($scope.patients, function (patient) { 
     tableRow = tableRow + [ 
      '<div data-ng-click="popup("'+patient+'")">', 
       '<div class="name-container">'+patient.name+'</div>', 

      '</div>'].join(''); 
    }); 
    $scope.renderHTML =$sce.trustAsHtml(tableRow); 

    $scope.popup = function(patient) { 
    ... 

}; 

Вы передаете объект пациента в всплывающей функции, я думаю, он может не работать. Если это не работает, попробуйте с помощью JSON.stringify

См следующую ссылку для получения дополнительной информации How to make ng-bind-html compile angularjs code

Предложение:

Попробуйте использовать нг-повторить директиву в месте angular.forEach. Я думаю, что вы можете достичь ваши требования легко с помощью нг-повтора, для справки:

<div ng-repeat="patient in patients"> 
     <div data-ng-click="popup(patient)"> 
      <div class="name-container">patient.name</div> 
      </div> 
     </div> 
    </div> 

ОБНОВЛЕНО:

Попробуйте

angular.forEach($scope.patients, function(value,key){ 
     tableRow = tableRow + [ 
      '<div data-ng-click="popup("'+patients[key]+'")">', 
       '<div class="name-container">'+patients[key].name+'</div>', 

      '</div>'].join(''); 
    }); 
    $scope.renderHTML =$sce.trustAsHtml(tableRow); 

    $scope.popup = function(patient) { 
    ... 

}; 
+0

Ну у меня есть больше, чем 2k records и data-ng-repeat делают это очень медленным, так что я проверяю другой способ рендеринга этого списка. –