2016-01-06 3 views
0

У меня есть контроллер, который обрабатывает щелчки кнопок на панели навигации, и я пытаюсь выяснить, как изменить значение «$ 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; 
    }; 
}) 
+0

'this' и' $ scope' такая же думаю, что внутри контроллер – AlainIb

+0

Я предполагаю, что где-то в коде вы не включали, что вы определяете свой контроллер с помощью «... как панели», так что panel.selectTab() существует и будет фактически вызван. – Scott

ответ

0

заменить

$scope.isSelected = function(checkTab){ 
    _this.isSelected(); 
}; 

по

$scope.isSelected = function(checkTab){ 
    return _this.isSelected(); 
}; 
+0

Спасибо, но это, похоже, не сработало. Чтобы изменить значение $ scope.active в нижнем коде, функция selectTab работает, однако, в новом верхнем коде, это не так. –