我正在使用新的angular-ui 路由器,它包含一个状态机(https://github.com/angular-ui/ui-router)。这个伟大的路由器允许用户指定参数作为 URL 的一部分。
例如:
$stateProvider
.state('contacts.detail', {
url: "/contacts/:contactId",
templateUrl: 'contacts.detail.html',
controller: function ($stateParams) {
// If we got here from a url of /contacts/42
expect($stateParams).toBe({contactId: 42});
}]
})
(见这里)
这意味着,当用户导航到 /contacts/42 时,状态将更改为“contacts.details”,并将 42 参数注入控制器
不过有一个问题。如果仅 url 参数更改,则仍会调用 transitionTo 函数(例如,手动更改 url 或绑定到输入框时会发生这种情况)。这反过来会导致该状态的视图指令被重新创建,如果我们只想更新该状态下的某些内容,这既是浪费时间,也是一个问题。
似乎是故意的。从代码:
// Starting from the root of the path, keep all levels that haven't changed
var keep, state, locals = root.locals, toLocals = [];
for (keep = 0, state = toPath[keep];
state && state === fromPath[keep] && equalForKeys(toParams, fromParams, state.ownParams);
keep++, state = toPath[keep]) {
locals = toLocals[keep] = state.locals;
}
equalForKeys 是比较参数,如果有差异则返回 false。
我的问题:你知道为什么作者会这样写吗?您认为更改是否安全,以便仅更改参数时没有过渡?
非常感谢您一直阅读到这里,以及任何想法
里奥
编辑:似乎这是设计使然。刚刚发现:https ://github.com/angular-ui/ui-router/issues/46