因为有个需求是点击控件弹出新页面,而在controller中使用$state.go是在原页面打开。
所以需要先使用$state.href 获取连接,再使用
在新页面打开。
最近升级angular-ui-router 到最新版本1.0.15后
$state.href 返回为null,经过检测,发行1.0.3版本和以后的版本把
UrlMatcher.prototype.format
这个函数改了。
新版本的代码
StateService.prototype.href = function (stateOrName, params, options) {
var defaultHrefOpts = {
lossy: true,
inherit: true,
absolute: false,
relative: this.$current,
};
options = defaults(options, defaultHrefOpts);
params = params || {};
var state = this.router.stateRegistry.matcher.find(stateOrName, options.relative);
if (!isDefined(state))
return null;
if (options.inherit)
params = this.params.$inherit(params, this.$current, state);
var nav = (state && options.lossy) ? state.navigable : state;
if (!nav || nav.url === undefined || nav.url === null) {
return null;
}
return this.router.urlRouter.href(nav.url, params, {
absolute: options.absolute,
});
};
调用UrlRouter.href
UrlRouter.prototype.href = function (urlMatcher, params, options) {
var url = urlMatcher.format(params);
if (url == null)
return null;
options = options || { absolute: false };
var cfg = this._router.urlService.config;
var isHtml5 = cfg.html5Mode();
if (!isHtml5 && url !== null) {
url = '#' + cfg.hashPrefix() + url;
}
url = appendBasePath(url, isHtml5, options.absolute, cfg.baseHref());
if (!options.absolute || !