Angularjs 与ui路由器同时处于多个活动状态

Angularjs 与ui路由器同时处于多个活动状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,例如,您希望能够做到的是: 我在shell中有一个活动状态“order.detail”,在这些详细信息中,将在每个产品线中提供一个链接,该链接指向“product.detail”状态,该状态也是可以在shell中显示的状态 但此链接应将状态“product.detail”显示为对话框中的一个框架,而不更改当前位置,并在shell中保持活动状态不变 另外,“product.detail”状态将用作shell的主视图,并且为了允许它们的重用,您的模板应该由对话框的“div”模板包装 我的意思是,允许

例如,您希望能够做到的是:

我在shell中有一个活动状态“order.detail”,在这些详细信息中,将在每个产品线中提供一个链接,该链接指向“product.detail”状态,该状态也是可以在shell中显示的状态

但此链接应将状态“product.detail”显示为对话框中的一个框架,而不更改当前位置,并在shell中保持活动状态不变

另外,“product.detail”状态将用作shell的主视图,并且为了允许它们的重用,您的模板应该由对话框的“div”模板包装

我的意思是,允许在不离开当前屏幕的情况下查看某些内容的详细信息,并使用相同的现有详细信息屏幕执行此操作,或者只允许通过现有视图的相关数据进行“向下搜索”。

在AngularJS中共享状态 Angular的一个优点是,通过它可以很容易地跟踪状态

例如,考虑一个索引视图,其中包含一个具有许多筛选选项的分页格式化表。单击其中一个条目将带您进入该条目的详细信息视图。当用户从细节返回到索引时,他/她会期望网格的UI状态与他们离开时完全相同:相同的页面、相同的排序方式、相同的应用过滤器、相同的一切。使用传统技术时,您将不得不求助于cookie、查询参数和/或服务器端状态(较少)魔术,这一切都感觉(实际上)非常麻烦且容易出错

在Angular的世界中,提供程序值是单例的,因此当我们将实例注入其中一个控制器时,它将始终是同一个实例。另一方面,每次请求控制器时,都将重新创建控制器

例子 注册空对象以跟踪控制器:

myApp.value('formState', {});
创建控制器,注入提供程序值并在作用域上公开它:

myApp.controller('MyController', function($scope, formState) {
  $scope.formState = formState;
});
通过ng model指令将提供程序值的任何属性挂接到输入元素

<input type="text" ngModel="formState.searchFilter"/>

现在,每次用户离开并重新进入该视图时,UI的状态都保持不变。您可以向状态添加任意数量的数据,如果需要,甚至可以在多个控制器之间共享数据

提供者类型 有不同的方法来创建提供者值:工厂、服务、值、常量和提供者。如果您想要对状态进行更多控制,例如状态管理,您可以使用其他选项之一。可以找到更多信息

对话还是不对话 在传统网站上,在对话框中显示细节是一种“廉价”的把戏,可以在后台跟踪状态。当然,这仍然是一个选择与角度,但没有必要它。从用户体验的角度来看,对话框是“未完成”的,如果可能的话应该避免,但它也会在响应和打印方面带来麻烦

普朗克例子 一些代码示例在控制器/视图之间共享状态


是的,我知道提供程序的容量,我使用这些状态的高级形式在每个视图中维护缓存状态字典,它必须保持不变。事实并非如此,对话只是一个例子。整个问题可以归结为我的最后一段,这是业务应用程序中的一个常见概念,称为“向下钻取”。可以同时获得两个活动状态,一个不改变另一个(特别是用于维护复杂状态机的ui路由器)