У меня есть контроллер, который обрабатывает щелчки кнопок на панели навигации, и я пытаюсь выяснить, как изменить значение «$ scope.active» на каждом клике. У меня есть старый код в нижней части, которая в настоящее время работает, значение setTab и checkTab оба передается с помощью нг-клик:Угловая область видимости JS внутри функции
<a ng-click="UserCtrl.vipList(); panel.selectTab('vip')"> <li ng-class="{'selected-box': active == 'vip'}" ng-class="{ select: panel.isSelected('vip') }"> ... etc
Нового кода, который не устанавливает $ scope.active. Я попытался установить это значение во всех функциях.
var PanelController = function($scope){
var _this = this;
_this.tab = 'daily';
$scope.active = 'daily';
$scope.selectTab = function(setTab){
_this.selectTab();
};
$scope.isSelected = function(checkTab){
_this.isSelected();
};
};
PanelController.prototype.selectTab = function(setTab){
this.tab = setTab;
};
PanelController.prototype.isSelected = function(checkTab){
return this.tab === checkTab;
};
PanelController.$inject = ['$scope'];
app.controller('PanelController', PanelController);
Старый рабочий код, который был переработан:
app.factory('Panel', function(){
var tab = 'daily';
var setTab = function(setTab){
return setTab;
}
return {
tab: tab,
setTab: setTab
}
})
app.controller('PanelController', function($scope, Panel){
this.tab = Panel.tab;
$scope.active = 'daily';
this.selectTab = function(setTab) {
this.tab = Panel.setTab(setTab);
$scope.active = this.tab;
};
this.isSelected = function(checkTab) {
return this.tab === checkTab;
};
})
'this' и' $ scope' такая же думаю, что внутри контроллер – AlainIb
Я предполагаю, что где-то в коде вы не включали, что вы определяете свой контроллер с помощью «... как панели», так что panel.selectTab() существует и будет фактически вызван. – Scott