現在のAngularJSプロジェクトでBootstrap UIのタブ ディレクティブを使用しており、ルートベースのタブの実装に非常に苦労しています。
<tabset>
<tab heading="Dashboard"
select="$parent.onTabSelected('dashboard')"
active="$parent.isActive(this)">
<!-- Content... -->
</tab>
</tabset>
select
タブの見出しをクリックしたときにルートを変更しても属性は正常に機能しますが、属性を上記のように機能させることはできません(active
式の解析後に angular-ui 内で失敗します)。
だから私の質問は: なぜアクティブな属性が機能しないのですか?タブを双方向のルートにバインドするより良い方法はありますか?
更新: 以下は私のコントローラーです:
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
ディレクティブ関数内のメソッドが何らかの理由で作成されていないようです。理由はありますか?