Angularjs 与ui路由器同时处于多个活动状态
例如,您希望能够做到的是: 我在shell中有一个活动状态“order.detail”,在这些详细信息中,将在每个产品线中提供一个链接,该链接指向“product.detail”状态,该状态也是可以在shell中显示的状态 但此链接应将状态“product.detail”显示为对话框中的一个框架,而不更改当前位置,并在shell中保持活动状态不变 另外,“product.detail”状态将用作shell的主视图,并且为了允许它们的重用,您的模板应该由对话框的“div”模板包装 我的意思是,允许在不离开当前屏幕的情况下查看某些内容的详细信息,并使用相同的现有详细信息屏幕执行此操作,或者只允许通过现有视图的相关数据进行“向下搜索”。在AngularJS中共享状态 Angular的一个优点是,通过它可以很容易地跟踪状态Angularjs 与ui路由器同时处于多个活动状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,例如,您希望能够做到的是: 我在shell中有一个活动状态“order.detail”,在这些详细信息中,将在每个产品线中提供一个链接,该链接指向“product.detail”状态,该状态也是可以在shell中显示的状态 但此链接应将状态“product.detail”显示为对话框中的一个框架,而不更改当前位置,并在shell中保持活动状态不变 另外,“product.detail”状态将用作shell的主视图,并且为了允许它们的重用,您的模板应该由对话框的“div”模板包装 我的意思是,允许
例如,考虑一个索引视图,其中包含一个具有许多筛选选项的分页格式化表。单击其中一个条目将带您进入该条目的详细信息视图。当用户从细节返回到索引时,他/她会期望网格的UI状态与他们离开时完全相同:相同的页面、相同的排序方式、相同的应用过滤器、相同的一切。使用传统技术时,您将不得不求助于cookie、查询参数和/或服务器端状态(较少)魔术,这一切都感觉(实际上)非常麻烦且容易出错
在Angular的世界中,提供程序值是单例的,因此当我们将实例注入其中一个控制器时,它将始终是同一个实例。另一方面,每次请求控制器时,都将重新创建控制器 例子 注册空对象以跟踪控制器:myApp.value('formState', {});
创建控制器,注入提供程序值并在作用域上公开它:
myApp.controller('MyController', function($scope, formState) {
$scope.formState = formState;
});
通过ng model指令将提供程序值的任何属性挂接到输入元素
<input type="text" ngModel="formState.searchFilter"/>
现在,每次用户离开并重新进入该视图时,UI的状态都保持不变。您可以向状态添加任意数量的数据,如果需要,甚至可以在多个控制器之间共享数据
提供者类型
有不同的方法来创建提供者值:工厂、服务、值、常量和提供者。如果您想要对状态进行更多控制,例如状态管理,您可以使用其他选项之一。可以找到更多信息
对话还是不对话
在传统网站上,在对话框中显示细节是一种“廉价”的把戏,可以在后台跟踪状态。当然,这仍然是一个选择与角度,但没有必要它。从用户体验的角度来看,对话框是“未完成”的,如果可能的话应该避免,但它也会在响应和打印方面带来麻烦
普朗克例子
一些代码示例在控制器/视图之间共享状态