【发布时间】:2015-04-14 05:43:40
【问题描述】:
我想将状态加载为模态,以便我可以覆盖状态而不影响应用程序中的任何其他状态。例如,如果我有这样的链接:
<a ui-sref="notes.add" modal>Add Note</a>
然后我想使用指令中断状态更改:
.directive('modal', ['$rootScope', '$state', '$http', '$compile',
function($rootScope, $state, $http, $compile){
return {
priority: 0,
restrict: 'A',
link: function(scope, el, attrs) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
event.preventDefault();
});
el.click(function(e){
$http
.get('URL HERE')
.then(function(resp){
$('<div class="modal">' + resp.data + '</div>').appendTo('[ui-view=app]');
setTimeout(function(){
$('.wrapper').addClass('showModal');
},1);
});
});
}
}
}
])
这成功地阻止了状态更改并加载 URL 并将其作为模式附加到应用程序。 问题是它会再次加载整个应用程序...
如何只加载状态?例如模板文件和相邻的控制器。
状态如下:
.state('notes.add',
{
parent: 'notes',
url: '/add',
views: {
'content': {
templateUrl: 'partials/notes/add.html',
controller: 'NotesAddCtrl'
}
}
})
如何使用 jQuery 工作的示例:http://dev.driz.co.uk/AngularModal
了解我如何通过 AJAX 访问 StateA 和 StateB 加载,该 AJAX 使用 History API 更改 URL 以反映当前状态更改。
并且无论我是在索引、StateA 还是 StateB 上,我都可以将 StateA 或 StateB 作为模式加载(即使我已经在那个 State 上)并且它不会更改 url 或当前内容,它只是覆盖状态内容。
这就是我希望在 AngularJS 中能够做到的。
注意。此示例不适用于浏览器的后退和前进按钮,因为它是一个快速示例并且没有正确使用历史 API。
【问题讨论】:
-
看起来您正在导航到不同的 URL,那么您要准确加载什么状态?
-
是的,notes.add 状态。可以在浏览器中通过 URL 访问,也可以在模态中通过 JS 访问(无需更改 URL(这一切都会发生,但它会再次加载整个应用程序)。
-
您尝试过这里建议的解决方案吗? stackoverflow.com/questions/21883559/…
-
那么我需要什么来防止它再次加载整个应用程序?我没有看到防止答案中提到的解决方案。谢谢。
-
看看这个小提琴:jsfiddle.net/7tzXh/27 你可能想要构造你的代码来匹配它,它实现了你正在寻找的东西
标签: javascript jquery angularjs