我正在为我当前的AngularJS项目使用来自Bootstrap UI的 tab 指令,并且在实现基于路由的 tabs时遇到了很大的困难。
<tabset>
<tab heading="Dashboard"
select="$parent.onTabSelected('dashboard')"
active="$parent.isActive(this)">
<!-- Content... -->
</tab>
</tabset>
虽然该select
属性可以在单击选项卡标题时更改路线,但我无法使该active
属性按上述方式工作(在解析表达式后在 angular-ui 内部失败)。
所以我的问题是:为什么 active 属性不起作用,是否有更好的方法将选项卡绑定到我的双向路由?
更新: 以下是我的控制器:
MainCtrl = function($scope) {
$scope.rooms = [{
id : 0,
title : 'Room 1'
}, {
id : 1,
title : 'Room 2'
}];
$scope.isActive = function(route) {
if(('#/' + route) === location.hash) {
return true;
}
return false;
}
$scope.onTabSelected = function(tab) {
var route;
if ( typeof tab === 'string') {
switch(tab) {
case 'dashboard':
route = 'dashboard';
break;
}
} else {
route = 'rooms/' + tab.room.id;
}
window.location.hash = '#/' + route;
}
};
该isActive
方法被正确调用,但随后发生以下异常:
TypeError: undefined is not a function
at postLink (http://fakepath/bootstrap-ui/templates.js:2374:11)
显然,由于setActive
某种原因没有创建指令函数内部的方法。知道为什么吗?