【问题标题】:How to insert HTML along with onclick function into view in angularjs如何在 angularjs 中将 HTML 和 onclick 函数插入到视图中
【发布时间】:2017-03-24 15:09:07
【问题描述】:

我正在尝试将 html 呈现到我的视图中,并且我想在此 html 中插入一个函数调用,但不知道如何做到这一点。这是我的javascript:

        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>

是否可以使用这种方式在 popup() 函数中添加患者对象?

【问题讨论】:

    标签: javascript angularjs escaping html-sanitizing


    【解决方案1】:

    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

    建议:

    尝试使用 ng-repeat 指令代替 angular.forEach。我认为您可以通过使用 ng-repeat 轻松实现您的要求,供参考:

     <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) {
        ...
    
    };
    

    【讨论】:

    • 嗯,我有超过 2k 条记录,并且 data-ng-repeat 使它非常慢,所以我正在测试另一种呈现此列表的方法..
    猜你喜欢
    • 2013-09-12
    • 2012-03-12
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多