Угловые реляционные модели? Может ли модель ссылаться на другую модель?
У меня есть многоуровневая навигационная структура, например, которая производит верхнюю навигацию:
[
{id: 1, label: 'Home', icon: 'fa-home', subitems: []},
{id: 2, label: 'Sitemap', icon: 'fa-sitemap', subitems: []},
{id: 3, label: 'Contact', icon: 'fa-phone', subitems: []}
]
Это прекрасно работает, но вместо этого я хотел бы сделать что-то вроде этого, чтобы определить структуру навигации:
[
{id: 1, subitems: []},
{id: 3, subitems: []},
{id: 2, subitems: []}
]
и отдельная связанная модель, которая содержит отдельный список определений nav:
[
{id: 1, label: 'Home', icon: 'fa-home'},
{id: 2, label: 'Sitemap', icon: 'fa-sitemap'},
{id: 3, label: 'Contact', icon: 'fa-phone'}
]
Это позволило бы мне дублировать элементы навигации и обновлять свойства в одном месте без дублирования определений. Backbone имеет реляционный плагин, который допускает такого рода вещи - не уверен, как сделать что-то подобное в угловых. Я мог бы просто перебрать исходные навигационные идентификаторы и заменить их определениями с любыми изменениями, но я подумал, что может быть лучший способ сделать это с Angular 1.x
1 ответ
Чистым угловым способом решения некоторых дублирующих проблем является использование многократно используемых директив.
function navigationItemDirective() {
return {
link: function(scope, element, attrs) {
console.log(info) // get all necessary info
scope: {
info: "=info" // two-way binding to your separate model
id: "@" // unique id for to bind the directive with the model
}
}
}
angular.module("app").directive("navigationElemenent", navigationItemDirective);