Как динамически добавлять директиву AngularJS из контроллера?

#angularjs

#angularjs

Вопрос:

Я хочу добавить директиву AngularJS из контроллера.

код контроллера:

     $scope.getLink = function(fileInfo, index)
                {
                    if(fileInfo !== null)
                    {
                    if(fileInfo.fileType.indexOf("image") !== -1)
                    {
                        return $sce.trustAsHtml('<span ng-click="getImage('  index  ', "'
                              fileInfo.filePath  '")">view</span>');
                    }
                    else
                    {
                        return $sce.trustAsHtml('<a target="_blank" href="/phoenix/subscriber/getfile' 
                          fileInfo.filePath '">download</a>');
                    }
                    }
                };
$scope.getImage = function()
            {
                alert("Done");
            };
  

HTML :

 <div ng-show="post.fileInfo !== null">
 <div ng-bind-html="getLink(post.fileInfo,$index)"></div>
                    </div>
  

Эти коды работают нормально, но проблема в том, что добавленный ng-click не работает.

Комментарии:

1. где находится ng-click?

2. Если бы это был я, я бы разместил изменчивость в html. То есть ng-если изображение, показать html изображения, ng-если не изображение, показать ссылку.

3. Кроме того, это исправит вашу проблему с кликом. Я полагаю, что в данный момент это не работает, потому что html, отправленный с контроллера, не компилируется. Таким образом, ng-click не имеет никакого значения (поскольку он не рассматривается как директива, Не связан и т. Д.)

Ответ №1:

Нет необходимости управлять представлением таким образом, когда в angular встроены директивы like ng-if или ng-show управлять этим в представлении

Вам вообще не нужна эта функция

 <div ng-show="post.fileInfo !== null">
  <div>
    <span ng-if="post.fileInfo.fileType.indexOf('image') !== -1"
          ng-click="getImage($index,post.fileInfo.filePath)">view</span>
    <a ng-if="post.fileInfo.fileType.indexOf('image') === -1" 
       target="_blank" 
       ng-href="/phoenix/subscriber/getfile/{{post.fileInfo.filePath}}">download</a>

  </div>
</div>
  

Причина, по которой ваш подход не сработал, заключается в том, что при самостоятельной вставке директив вам необходимо использовать $compile

Здесь также можно использовать простую директиву