2015-09-05 3 views
2

У меня есть пользовательские директивы для загрузки страниц внутри DIVИзменить атрибут пользовательской директивы

.directive('page', function() { 
    return { 
     templateUrl: function (elem, attr) { 
      return 'pages/page-' + attr.num + '.html'; 
     } 
    }; 
}); 

вот дом представление пользовательской директивы

<div page num="{{pageNo}}"></div> 

Здесь я хочу, чтобы изменить номер страницы из контроллер.

Директива отлично работает, если значение добавляется непосредственно

<div page num="1"></div> 

ответ

3

Как вы хотите интерполированное значение pageNo внутри вашей директивы, Вы не можете получить это значение внутри функции templateUrl. Вам нужно использовать директиву ng-include, чтобы получить значение имени области внутри вашей директивы.

Markup

<div page num="{{pageNo}}"></div> 

Код

app.directive('page', function() { 
    return { 
    scope: { 
     num: '@' 
    }, 
    template: '<div ng-include="\'pages/page-\'+ num + \'.html\'"></div>' 
    }; 
}); 

Working Plunkr

+0

Не получится. Что такое локальная переменная 'num' в вашем коде? – dfsq

+0

@dfsq, откровенно говоря, я не понял вашу точку зрения. Не могли бы вы рассказать о ней подробнее .. Локальная переменная 'num' вышла из изолированной области директивы .. и она получила свое значение, оценив' {{pageNo}} ' атрибута 'num' –

+0

Спасибо за это. Мне нужно изменить значение num из контроллера. pageNo выражение должно быть изменено, и соответствующее значение необходимо добавить к URL-адресу. –

1

От the docs:

В настоящее время у вас нет возможности получить доступ к переменным области видимости из функции templateUrl, поскольку шаблон запрашивается до инициализации области.

Это означает, что у вас есть доступ к буквальному значению атрибута, и вы не можете его оценить в определенной области. Возможно, вы сможете определить свою директиву внутри закрытия и получить доступ к родительской области. Затем вы можете позвонить scope.$eval('pageNo').

Однако: Это было бы очень уродливым взломом. Я предпочел бы выбрать решение с ng-include, предложенным @ pankaj-parkar

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