2014-10-26 2 views
2

У меня есть директива, которая создает входной AutocompleteКак передать ссылку объекта на внутреннюю директиву в Angular JS?

angular.module('autocomplete', []) 
    .directive('autocomplete', function (...) { 
     return { 
      restrict: 'E', 
      scope: { 
       "id": "@id", 
       "selectedObject": "=selectedobject", 
       "baseSearchUrl" : "@basesearchurl" 
      }, 
      templateUrl: "..." 
      link: function(...){...} 
     } 
    } 

пример использования:

<autocomplete 
    id="favoriteMovie" 
    selectedobject='favMovie' 
    searchUrl='/rest/movies?search=' /> 

Он прекрасно работает. Теперь я хочу, чтобы создать новый, более конкретную, директиву, создать автозаполнения для просмотра фильмов, так что я могу использовать его как это:

<autocompleteMovie 
    id="favoriteMovie" 
    selectedmovie='favMovie'/> 

Новая директива выглядит следующим образом:

angular.module('autocompletemovie', []) 
.directive(
    'autocompletemovie', 
    function() { 
     return { 
      restrict : 'E', 
      scope : { 
       "id" : "@", 
       "selectedMovie" : "=selectedmovie" 
      }, 
      templateUrl : '...' 
     }; 
    }); 

Мой шаблон Html для нового компонента:

<autocomplete 
    id="{{id}}" 
    selectedobject='{{selectedMovie}}' 
    searchUrl='/rest/movies?search=' /> 

Но это не работает. Атрибут id передается правильно «внутреннему» autocomplete, однако ссылка на объект, заданная атрибутом selectedmovie, не работает.

Я сделал вторую попытку, передавая имя ссылки на объект вместо самого объекта:

Директива:

angular.module('autocompletemovie', []) 
.directive(
    'autocompletemovie', 
    function() { 
     return { 
      restrict : 'E', 
      scope : { 
       "id" : "@", 
       "selectedMovie" : "@selectedmovie" 
      }, 
      templateUrl : '...' 
     }; 
    }); 

Но это не работает, как хорошо.

Я надеюсь, что вы поймете, чего я пытаюсь достичь.

[Редактировать] Я также попытался:

<autocomplete 
    id="{{id}}" 
    selectedobject='selectedMovie' 
    searchUrl='/rest/movies?search=' /> 

Но это не работает. Объект с фиксированным именем selectedMovie создается на объем, даже если я позвоню директиву с другим атрибутом selectedmovie:

<autocompleteMovie 
    id="favoriteMovie" 
    selectedmovie='favMovie'/> 

В приведенном выше примере, я хотел бы иметь объект с именем favoriteMovie и не selectedMovie.

[/ Edit]

ответ

1

Попробуйте изменить:

<autocomplete 
    id="{{id}}" 
    selectedobject='{{selectedMovie}}' 
    searchUrl='/rest/movies?search=' /> 

в

<autocomplete 
    id="{{id}}" 
    selectedobject='selectedMovie' 
    searchUrl='/rest/movies?search=' /> 

= синтаксис в директиве связывается с объектом в то время как {{}} синтаксис будет интерпретироваться как строку. Идентификатор работает, потому что @ передает интерпретируемое значение строки в директиву.

+0

Я тоже пробовал это, но он не работает, как я ожидал. Я отредактировал вопрос, чтобы добавить дополнительное объяснение. –