2015-02-16 23 views
11

ho una direttiva chiamato iframely e mi è all'interno di un ng-repeat come questo:Errore di sintassi: Token ':' è un token imprevisto quando la variabile di passaggio alla direttiva

<iframely url="iterator.url"></iframely> 

Questo solo considera il valore come stringa "iterator.url" , non il valore effettivo di .url. Per sperimentare, ho appena messo in un URL direttamente:

<iframely url="https://soundcloud.com/braxe1/braxe-one-more-chance"></iframely> 

Il che mi dà l'errore Syntax Error: Token ':' is an unexpected token. Il più vicino che ho avuto modo di passare questo valore per la direttiva è:

<iframely url="'{{iterator.url}}'"></iframely> // note double and single quotes 

questo risolve il parametro URL del iterator, ma anche lo passa insieme ai ' '-virgolette singole come parte della stringa.


EDIT: provato anche che senza le virgolette singole.

<iframely url="{{iterator.url}}"></iframely> 

e ottenuto Error: [$parse:syntax] Syntax Error: Token '{' invalid key at column 2 of the expression [{{iterator.url}}] starting at [{iterator.url}}]

Qual è il modo corretto di fare questo?


EDIT2: Ecco il codice per la direttiva:

angular.module('iframely', []) 

.directive('iframely', [ '$http', '$sce', function ($http, $sce) { 
    return { 
     replace: true, 
     restrict: "E", 
     scope: { 
      url: '=' 
     }, 
     template: '<div ng-bind-html="content"></div>', 
     link: function (scope, element, attrs) { 
      $http({ 
       url: 'http://localhost:8061/iframely', 
       method: 'GET', 
       params: { 
        url: attrs.url 
       } 
      }) 
      .then(function (result) { 
       scope.content = $sce.trustAsHtml(result.data.html) 
      }) 
     } 
    } 
}]) 
+1

url = "{{iterator.url}}" senza virgolette singole ... – micronyks

+0

@micronyks In realtà, quello era il primo che ho provato. 'Errore: [$ parse: sintassi] Errore di sintassi: Token '{' chiave non valida nella colonna 2 dell'espressione [{{iterator.url}}] a partire da [{iterator.url}}' – Noah

+0

Puoi pubblicare il codice per la tua direttiva? – adam0101

risposta

3

Modifica della direttiva ad essere i seguenti :

angular.module('iframely', []) 

.directive('iframely', [ '$http', '$sce', function ($http, $sce) { 
    return { 
     replace: true, 
     restrict: "E", 
     scope: { 
      url: '@' 
     }, 
     template: '<div ng-bind-html="content"></div>', 
     link: function (scope, element, attrs) { 
      $http({ 
       url: 'http://localhost:8061/iframely', 
       method: 'GET', 
       params: { 
        url: scope.url 
       } 
      }) 
      .then(function (result) { 
       scope.content = $sce.trustAsHtml(result.data.html) 
      }) 
     } 
    } 
}]) 

Notare "@" nell'ambito e lo url: scope.url.

Problemi correlati