我有一个抽象的父视图,该视图旨在与其嵌套视图共享一个控制器。
.state('edit', {
abstract: true,
url: '/home/edit/:id',
templateUrl: 'app/templates/editView.html',
controller: 'editController'
})
.state('edit.details', {
url: '/details',
templateUrl: 'app/templates/editDetailsView.html'
})
.state('edit.info', {
url: '/info',
templateUrl: 'app/templates/editInfoView.html'
})
路由工作正常。
问题是,当我$scope
从其中一个嵌套视图更新变量时,更改未反映在视图中。当我从父视图执行相同操作时,它可以正常工作。这种情况不需要$apply
。
我的猜测是editController
正在为每个视图创建一个新的实例,但是我不确定为什么或如何修复它。
这里的问题与以下问答有关:如何在angularjs ui-router中的状态之间共享$scope数据?。
解决方法隐藏在:
在AngularJS中,子作用域通常在原型上从其父作用域继承。
…有一个 ‘。’ 在您的模型中,将确保原型继承在起作用。
// So, use
<input type="text" ng-model="someObj.prop1">
// rather than
<input type="text" ng-model="prop1">.
还有这个
States-%26-Nested-Views#scope-inheritance-by-view-hierarchy-only)
请记住,如果状态的视图是嵌套的,则范围属性仅沿状态链继承。范围属性的继承与状态的嵌套无关,而与视图(模板)的嵌套无关。
完全有可能存在嵌套状态,这些状态的模板会在站点内各个非嵌套位置填充ui视图。在这种情况下,您不能期望在子状态的视图中访问父状态视图的范围变量。
有了我们应该在编辑控制器中执行此操作
controller('editController', function ($scope) {
$scope.Model = $scope.Model || {SomeProperty : "xxx"};
})
而且我们甚至可以重用它controller: 'editController'
(我们不必这样做,因为$ scope.Model将会存在-感谢继承)
.state('edit', {
abstract: true,
url: '/home/edit/:id',
templateUrl: 'app/templates/editView.html',
controller: 'editController'
})
.state('edit.details', {
url: '/details',
templateUrl: 'app/templates/editDetailsView.html',
controller: 'editController'
})
.state('edit.info', {
url: '/info',
templateUrl: 'app/templates/editInfoView.html',
controller: 'editController'
})
现在,同一个控制器将被实例化多次(父级为所有子级),但是$scope.Model
将仅被初始化一次(在父级内部),并且可在任何地方使用
在这里检查这个类似的工作示例
问题内容: 我有这样的结构: 我希望能够在如下所示的主要状态下定义模板,而不必在子状态下进行管理。 我希望命名的ui视图不是其子状态,并由该状态的views对象而不是子状态的templateUrl字段填充。我怎样才能做到这一点? 问题答案: 我们可以在 一种* 状态下使用 更多 视图,请参阅: * 多个命名视图 该定义只需要使用绝对命名即可: 如此处详细说明: 视图名称-相对名称与绝对名称 在幕后
问题内容: 我正在尝试创建文件查看器,并且想嵌套子目录。我正在使用ui-router,我希望每个子目录都有其自己的URL和状态。 说我有以下结构: 我希望我的路线是: 我想递归地执行此操作,而不是为每个子目录创建一个新状态 问题答案: 我建议用 一种状态 和 一种参数 - 来做。因为应该尽快定义所有状态,以支持url路由。所有这些唯一的folderPath可能不同,也可能是动态的-在运行时中,在应
问题内容: 是否可以在有条件的ui路由器中创建嵌套视图?条件已分配给用户角色。 例如,我有两种类型的用户: admin 和 user 。如果用户正在打开设置页面,则ui路由器仅添加分配给他的角色的该视图。 这是我的配置代码的示例 问题答案: 该视图将为每个用户(管理员或匿名)注入。但是我们可以管理哪个视图。最好的办法是使用 。 根据此问答: $ locationChangeSuccess和$sta
问题内容: 我正在尝试调用应该与 路线链接的控制器,但并未被调用。怎么了 问题答案: 好吧,我发现从给定的文件线索的的说 您可以为模板分配控制器。 警告: 如果未定义模板,则不会实例化控制器。 https://github.com/angular-ui/ui- router/wiki#controllers 但是我尝试添加,但仍然没有用,然后我发现我的父路由模板没有(我错误地删除了它),所以当我将
问题内容: 我正在尝试使用SceneBuilder用JavaFX构建一个简单的GUI,在这里我使用MenuItem(在中)选择一个根文件夹。然后,该文件夹的内容会在TextArea中列出,然后再次包装在TabPane中(,是嵌套的FXML,其中包括)。 我以这篇文章为起点来习惯MVC。不幸的是,由于我没有明确调用它,所以我不知道如何使嵌套的FXML侦听或绑定到外部FXML。现在,我只是停留在标签中
问题内容: 一个单例控制器是否可能具有多个视图 [https://github.com/angular-ui/ui- router/issues/494] ? 用例:我有一个ui-view = header和ui-view = content。我根据当前状态更改标题以显示上下文相关的按钮(即返回,保存,过滤等)。我希望这些按钮在内容控制器中调用一个函数,但是如果执行以下操作,它将创建两个MyCon