Como posso saída de um código de script que é armazenado como uma cadeia de caracteres em meu escopo para um AngularJS modelo?

StackOverflow https://stackoverflow.com//questions/25053926

Pergunta

Eu preciso usar um script incorporado em meus modelos, mas inserir dinamicamente um caminho para uma imagem antes que o script é executado.

Eu escrevi uma directiva para construir o caminho da imagem como um escopo variável, use $interpolate para inserir isso no <script> etiqueta.

A referência agora armazenados (como uma cadeia de caracteres) em $scope.tag é o código que eu gostaria de ser injetado e interpretados/executado como um script tag seria.

Em vez disso, no entanto, a tag de script é adicionado como uma seqüência de caracteres no meu template e não consigo para de treino que passo extra que eu precisaria realmente de saída da tag de script de seqüência de caracteres como uma tag de script.

Aqui é o modelo (a que se refere a directiva como a templateUrl):

<div>
  {{ tag }}
</div>

Directiva:

'use strict';

angular.module('App')
  .directive('sslLogo', function($location, $interpolate) {
    return {
      replace: false,
      restrict: 'AE',
      templateUrl: '/views/partials/ssl-logo.html',
      controller: function($scope, $element, $attrs) {
        // Outputs the full base url (http:// ... .com/ )
        var base_url = '';
            base_url += $location.protocol() + '://';
            base_url += $location.host();

            if ( $location.port() ) {
              base_url += ':' + $location.port();
            }

        // Add the path to the image asset.
        $scope.logo_url = base_url + "/images/static/comodo-wildcardssl.png";

        // Interpolate this path into the script tag and then store the script tag to be output to the template.
        $scope.tag = $interpolate('<script type="text/javascript">TrustLogo("{{ logo_url }}", "SCCC", "none");</script>', false, true)({ logo_url: $scope.logo_url });
      },
      link: function(scope, element, attrs) {}
    };
  });

Para referência, neste ponto, o $scope.tag variável irá conter uma seqüência de caracteres de:

<script type="text/javascript">TrustLogo("http://localhost:9000/images/static/comodo-wildcardssl.png", "SCCC", "none");</script>
Foi útil?

Solução

Parece que:

...
link: function(scope, element, attrs) {
  element.append( scope.tag );
}
...

obras que usa o jQuery para acrescentar a tag de script para a directiva do elemento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top