Я разрабатываю форум с Angular, и вы можете пометить каждое обсуждение. В списке обсуждений, если вы нажмете на тег, он будет фильтровать обсуждение с помощью этого тега.Директива AngularJS не обновляется
Я использую директиву для отображения метки:
directive('tag', function(){
return {
restrict: 'AE',
templateUrl: tagDirective,
controller: 'TagController',
controllerAs: 'tagCtrl',
scope: {
tagId: '@id'
},
replace:true
}
})
Шаблон:
<div class="tag" ng-click="tagCtrl.filterByTag(tagId)">
{{ tagCtrl.tags[tagId].title }}
</div>
Контроллер:
controller("TagController", ["TagService", "ModelService", "$location", function(tag, model, $location){
var ctrl = this;
ctrl.tags = {};
ctrl.tag = tag;
model.getTags(function(datas){
datas.forEach(function(item){
ctrl.tags["tag"+item.id] = item;
});
});
ctrl.filterByTag = function(id){
tag.current = ctrl.tags[id];
if($location.path() !== routes.index){
$location.path(routes.index);
}
};
}])
И обслуживание:
service('TagService', [function(){
var serv = this;
serv.current = {};
}])
Всякий раз, когда на форуме, когда пользователь нажимает на тег, он перенаправляется на индексную страницу (список всех обсуждений).
Используемая тега фильтрации «хранится» в сервисе.
Все это, кажется, работает: я могу отобразить сохраненный тег, я перенаправлен, когда я нажимаю тег (фильтрация еще не работает, это другая проблема).
Моя проблема, когда я хочу, чтобы отобразить метку в заголовке:
<tag id="{{ 'tag'+headerCtrl.tag.current.id }}"></tag>
Заголовок никогда не отображать название тега.
Я попытался это:
<tag id="{{ 'tag2' }}"></tag>
заставить отображение второго тега (а не фильтрации, только отображение), и это не работает, либо ...
Я делаю что-то неправильно ?
Дочернее предприятие: Я использую AngularJS в правильном направлении? Есть ли какая-то передовая практика, которую я не использовал или не понял?
Спасибо!
Edit 1:
Я имел часть заголовка:
Директива:
directive("forumHeader", function(){
return {
restrict: 'AE',
templateUrl: headerDirective,
controller: 'HeaderController',
controllerAs: 'headerCtrl',
replace:true
};
})
Html:
<header>
<tag tid="{{ 'tag'+headerCtrl.tag.current.id }}"></tag>
</header>
Контроллер:
controller("HeaderController", ["TagService", "ModelService", function(tag, model){
var ctrl = this;
ctrl.tag = tag;
ctrl.tags = [];
model.getTags(function(datas){
ctrl.tags = datas;
});
ctrl.colored = function(item){
if(item.color) return true;
};
}])
Вы можете использовать другое имя атрибута, как 'id' уже имеет значение в HTML. Когда браузер видит знаки препинания и пробелы, он, вероятно, отбрасывает атрибут, прежде чем Угловой получит его. – Thomas
Я меняю имя на tagId, такую же проблему. Когда я показываю обсуждение, тег работает. Это только в заголовке, который он не показывает. – JosselinTD
А что внутри headerCtrl? Правильно ли указан тег? Пожалуйста, покажите, как вы используете пользовательскую директиву ng-controller для headerCtrl. –