Я нашел приложение для наведения на холм в Интернете. он отлично работает для назначения hrefs. Я хотел преобразовать его для работы с состояниями ui.router и sref.Преобразование угловых директив меню для поддержки ui.router
Я добавил значение href и sref в объект данных меню.
где он генерирует и compliled HTML-I изменения {{}} node.href на "{{$ state.href (node.sref)}}"
но на выходе генерируется на «{{$ состояние .href (node.sref)}} появляется так же, как я его написал, это не оценивает.
Это потому, что в этом контексте $ state не определен? Если да, то как это определить?
Если нет, можете ли вы сказать мне, почему это не оценивает?
Моя конечная цель была примерно такой: {{node.href? node.href: $ state.href (node.sref)}}
и если node.href правдивый, он работает, но если href не скомпилирован, выражение отображается неопределенным ... поэтому я знаю, что он пытается Оцените это выражение ... Я преобразовал его в просто «$ state.href (node.sref)», чтобы упростить его ...
Также есть способ увидеть ошибки, сгенерированные во время компиляции $?
Любая помощь очень ценится, я довольно новичок в Angular, и в моих знаниях много пустот, поэтому, пожалуйста, не стесняйтесь задавать глупые вопросы, чтобы проверить мое базовое понимание проблемы и объяснить небольшими словами :) Мне это, наверное, нужно.
var app = angular.module('defaultApp');
app.controller('menuController', ['$scope', '$location', function ($scope, $location) {
$scope.breadcrumbs = [];
$scope.menu = [
{
text: 'HOME',
href: '\default.html',
children: [
{ text: 'Default', href: '\default.html' }
]
},
{
text: 'start',
//href: '\default.html',
sref: 'start',
children: [
{
text: 'search',
//href: '/manage-people',
sref: 'search',
children: [
{ text: 'search', sref: 'search' },
{ text: 'start', sref: 'start' }
]
}
]
},
{ text: 'MY INFO', href: '/my-info', sref: 'search' }
];
/* Directives */
app.directive('navMenu', ['$parse', '$compile', function ($parse, $compile) {
return {
restrict: 'C',
scope: true,
link: function (scope, element, attrs) {
scope.selectedNode = null;
scope.$watch(attrs.menuData, function (val) {
var template = angular.element('<ul id="parentTreeNavigation"><li ng-repeat="node in ' + attrs.menuData + '" ng-class="{active:node.active && node.active==true, \'has-dropdown\': !!node.children && node.children.length}"><a ng-href="{{$state.href(node.sref)}}" target="{{node.target}}" >{{node.text}}</a>{{node.click}}<sub-navigation-tree></sub-navigation-tree></li></ul>');
var linkFunction = $compile(template);
linkFunction(scope);
element.html(null).append(template);
}, true);
}
};
}])
.directive('subNavigationTree', ['$compile', function ($compile) {
return {
restrict: 'E',
scope: true,
link: function (scope, element, attrs) {
scope.tree = scope.node;
if (scope.tree.children && scope.tree.children.length) {
var template = angular.element('<ul class="dropdown "><li ng-repeat="node in tree.children" node-id={{node.' + attrs.nodeId + '}} ng-class="{active:node.active && node.active==true, \'has-dropdown\': !!node.children && node.children.length}"><a "{{ $state.href(node.sref)}}" target="{{node.target}}" >{{node.text}}</a><sub-navigation-tree tree="node"></sub-navigation-tree></li></ul>');
var linkFunction = $compile(template);
linkFunction(scope);
element.replaceWith(template);
}
else {
element.remove();
}
}
};
}]);
Если я заменил href = {{node.href}} на sref = {{node.sref}}, то node.sref никогда не компилируется. Идея выше, если node.href имеет значение, он использует href, если узел.sref имеет значение, которое использует, поэтому одно меню может работать для страниц ui-router и страниц, которые являются статическим контентом.
Добавлен пример моего ответа, надеюсь, что это поможет. – iH8
Ничего себе ты прав, я был намного сложнее, я вернулся и изменил его на ui-sref = {{node.sref}}, и он работает .. Я клянусь, что это было первое, что я пробовал ... должно быть, ben опечатка. Спасибо тебе, Рок! –