Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度UI路由器模式删除父状态_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs 角度UI路由器模式删除父状态

Angularjs 角度UI路由器模式删除父状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我正在开发一个有ui路由器模块的angular应用程序。 当进入路由器的特定状态时,我会显示一个模式对话框,然后它会替换我的父视图。我希望保留父视图,并将模式显示为覆盖。有没有一种方法可以通过ui路由器实现 举个例子: $stateProvider.state("clients.list", { url: "/list", templateUrl: "app/client/templates/client-list.tpl.html", controller: modul

我正在开发一个有ui路由器模块的angular应用程序。 当进入路由器的特定状态时,我会显示一个模式对话框,然后它会替换我的父视图。我希望保留父视图,并将模式显示为覆盖。有没有一种方法可以通过ui路由器实现

举个例子:

$stateProvider.state("clients.list", {
    url: "/list",
    templateUrl: "app/client/templates/client-list.tpl.html",
    controller: moduleNamespace.clientListController,
    resolve: {
        clients: function (ClientService) {
            return ClientService.all();
        }
    }
})
// This will replace "clients.list", and show the modal
// I want to just overlay the modal on top of "clients.list"
.state("clients.add", {
    url: "/add",
    onEnter: function ($stateParams, $rootScope, $state, ngDialog) {
        ngDialog.open({
            controller: moduleNamespace.clientAddController,
            template: "app/client/templates/client-add.tpl.html"
        });

        $rootScope.$on("ngDialog.closed", function (e, $dialog) 
              if ($state.current.name !== "clients.list") $state.transitionTo("clients.list");
        });
    }
})

谢谢

我认为合适的解决方案是:

$stateProvider.state("clients.list", {
    url: "/list",
    templateUrl: "app/client/templates/client-list.tpl.html",
    controller: moduleNamespace.clientListController,
    resolve: {
       clients: function (ClientService) {
          return ClientService.all();
      }
    }
})
.state("clients.list.add", {
    url: "^/add",
})
通过添加一个
^
,我将重要的事情变成了绝对的
/add
。大多数人只会执行
/list/add
,因为嵌套状态的默认行为是将它们添加到一起,
^
绕过了这一点。您还需要在状态上加载样式,使其成为“模态”,并位于其他内容之上

然后在
clients.list
中说明您需要更新
/client list.tpl.html
以拥有一个
ng视图
,该视图将在父视图的顶部设置样式


如果需要,我可以创建一个plunkr,但如果我这样做,我基本上是在为您实现一切。

为什么您希望这是一个状态?你想通过url打开它吗?我的另一个问题是,你是否希望它显示在“列表”视图的顶部?嗨@Nix,是的,我希望模式视图显示在列表视图的顶部。此外,我还需要通过urlAhh打开该模态视图,因此对模态使用嵌套视图。我不知道url^,让我试试看会出现什么。不需要plunkr:)。谢谢我的问题可能类似(甚至可能是相同的??)。我概括了我的代码,并包含了一个完整的演示。如果你有兴趣去看看,那就太棒了!