在AngularJS中使用自定义网址的模态窗口

前端之家收集整理的这篇文章主要介绍了在AngularJS中使用自定义网址的模态窗口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在我的Angular应用程序中显示一个模态窗口(基本上只是一个隐藏的div,将加载一个编译的模板).问题是,当模态打开时,我需要更改URL,以便用户可以复制链接并直接转到模态窗口,还可以使用后退按钮关闭模态窗口并返回上一页.这类似于Pinterest点击一个针时处理模态窗口的方式.

到目前为止,我创建了一个加载模板的指令,使用$compile进行编译,注入$scope,然后显示编译的模板.这工作正常

问题是一旦我使用$location来更改路径,路由控制器就会启动并将模板加载到ng-view中.

我想到了克服这个的两种方法,但是还没有实现:

>以某种方式阻止路由控制器在使用$location更改url时触发.我已经添加了一个监听器到$routeChangeStart以防止默认发生,但这似乎不起作用.
>不知何故向页面添加另一个视图处理程序(在页面上基本上有2个命名的ng-view指令),并且每个处理程序都可以处理不同的路由.现在看不到Angular支持这个.

该URL需要格式为/ item / item_id而不是/ item?item_id = 12345.

任何帮助将不胜感激.

如果您按照以下所述使用ui.router模块,则可以执行此操作: https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state.

他们的例子:

$stateProvider.state("items.add",{
    url: "/add",onEnter: function($stateParams,$state,$modal,$resource) {
        $modal.open({
            templateUrl: "items/add",resolve: {
              item: function() { new Item(123).get(); }
            },controller: ['$scope','item',function($scope,item) {
                $scope.dismiss = function() {
                    $scope.$dismiss();
                };

                $scope.save = function() {
                    item.update().then(function() {
                        $scope.$close(true);
                    });
                };
            }]
        }).result.then(function(result) {
            if (result) {
                return $state.transitionTo("items");
            }
        });
    }
});

我还传递一个’errorCallback’函数到then()函数,通过按Escape或点击背景处理模态解雇.

猜你在找的Angularjs相关文章