该API参考范围页面说:
范围可以从父范围继承.
该开发者指南范围页说:
范围(原型)从其父范围继承属性.
那么,子范围是否始终从其父范围继承原型?有例外吗?当它继承时,它是否总是正常的JavaScript原型继承?
javascript inheritance prototype prototypal-inheritance angularjs
在我正在研究的一个有角度的应用程序中,我希望有一个抽象的父状态,它必须解决其所有子状态的某些依赖关系.具体来说,我希望所有州都要求经过身份验证的用户从某个authroot状态继承该依赖关系.
我遇到的问题是父依赖关系并不总是被重新解决.理想情况下,我希望让父状态检查用户是否仍然自动登录任何子状态.它说,在文档中
子状态将从父状态继承已解析的依赖关系,它们可以覆盖它们.
我发现如果我从父级之外的状态进入任何子状态,父级依赖关系只会被重新解析,但如果在兄弟状态之间移动则不会.
在此示例中,如果在状态authroot.testA和authroot.testB之间移动,则只调用一次GetUser方法.当你移动到other状态并返回时,它将再次运行.
我能够将User依赖于每个子状态,以确保每次进入任何这些状态时都调用该方法,但这似乎会破坏继承依赖的目的.
我不正确地理解文档吗?有没有办法强制父状态重新解决其依赖关系,即使状态在兄弟姐妹之间发生变化?
<!doctype html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.0/angular-ui-router.min.js"></script>
<script>
(function(ng) {
var app = ng.module("Test", ["ui.router"]);
app.config(["$stateProvider", "$urlRouterProvider", function(sp, urp) {
urp.otherwise("/testA");
sp.state("authroot", {
abstract: true,
url: "",
template: "<div ui-view></div>",
resolve: {User: ["UserService", function(UserService) {
console.log("Resolving dependency...");
return UserService.GetUser();
}]}
});
sp.state("authroot.testA", {
url: "/testA",
template: "<h1>Test A {{User|json}}</h1>",
controller: "TestCtrl"
});
sp.state("authroot.testB", {
url: "/testB",
template: "<h1>Test B {{User|json}}</h1>",
controller: "TestCtrl"
});
sp.state("other", {
url: "/other",
template: …Run Code Online (Sandbox Code Playgroud) 我ui-router在我的应用程序中使用了优秀的模块.作为其中的一部分,我使用命名视图来管理我在应用程序中的"动态子导航".
考虑以下:
$urlRouterProvider.otherwise('/person/list');
$stateProvider
.state('person', {
url: '/person',
abstract: true,
})
.state('person.list', {
url: '/list',
views: {
"main@": {
templateUrl: "person.list.html",
controller: 'PersonListController'
}
}
})
.state('person.details', {
url: '/{id}',
views: {
'main@': {
templateUrl: "person.details.html",
controller: 'PersonController'
},
'nav@': {
templateUrl: "person.nav.html",
controller: 'PersonNavController'
}
}
});
Run Code Online (Sandbox Code Playgroud)
当用户首次访问该应用时,会向他们显示一个人员列表.当他们点击某个人时,他们会被带到详细信息页面.很基本的东西.这是标记,如果它有帮助......
<div>
<aside ui-view="nav"></aside>
<div ui-view="main"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,PersonNavController调用REST服务来获取人员列表,因此在查看人员时,用户可以导航兄弟元素.使用上述方法会导致模板和控制器重新渲染,从而导致每次点击后出现延迟,尽管内容永远不会改变.
有没有办法保持'nav@'视图加载,只刷新'main@'视图?