2015-02-16 2 views
11

я директива называется iframely и я его внутри ng-repeat, как это:Ошибка синтаксиса: Знак «:» неожиданный маркер при передаче переменной в директиве

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

Это просто обрабатывает значение как строку "iterator.url" , а не фактическое значение .url. Для эксперимента я просто положить в URL непосредственно:

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

Который дает мне ошибку Syntax Error: Token ':' is an unexpected token. Ближайшим я получил пропускание этого значения директивы является:

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

Это решает параметр URL в iterator, но и передает его вместе с ' ' одинарных кавычек как часть строки.


РЕДАКТИРОВАТЬ: Также попробовал это без одинарных кавычек.

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

И получил Error: [$parse:syntax] Syntax Error: Token '{' invalid key at column 2 of the expression [{{iterator.url}}] starting at [{iterator.url}}]

Что такое правильный способ сделать это?


EDIT2: Вот код для директивы:

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}}" без одинарных кавычек ... – micronyks

+0

@micronyks На самом деле это был первый, который я пробовал. 'Ошибка: [$ parse: синтаксис] Синтаксическая ошибка: токен '{' недопустимый ключ в столбце 2 выражения [{{iterator.url}}] начиная с [{iterator.url}}]' – Noah

+0

Можете ли вы опубликовать код для вашей директивы? – adam0101

ответ

3

Измените вашу директиву, чтобы быть следующим :

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) 
      }) 
     } 
    } 
}]) 

Обратите внимание на «@» в области и url: scope.url.

Смежные вопросы