2014-09-02 4 views
0

Я создаю простую систему вкладок с угловыми, но у меня возникают проблемы со ссылкой на this в родительской функции. Я знаю, что может быть недоразумений некоторые основы, поэтому, пожалуйста, просветить меня:Как получить «это» от родительской функции

ЯШ:

$scope.tabs = { 
    _this: this, // doesn't work 
    open: function(elem) { 
     $scope.tabsOpen = true; 
     if(elem) 
      $scope[elem] = true; 
    }, 
    close: function() { 
     $scope.tabsOpen = false;  
    }, 
    about: { 
     open: function() { 
      $scope.aboutOpen = true;  

      _this.notification.close(); // doesn't work 
      $scope.tabs.notification.close(); // works 

     }, 
     close: function() { 
      $scope.aboutOpen = false; 
     }   
    }, 
    notification: { 
     open: function() {/*etc*/}, 
     close: function() {/*etc*/} 
    }, 
    message: { 
     open: function() {/*etc*/}, 
     close: function() {/*etc*/} 
    }, 
} 

ответ

0

Как насчет: -

$scope.tabs = getTab(); 

function getTab(){ 
    var tab = { 
     open: function(elem) { 
      $scope.tabsOpen = true; 
      if(elem) 
       $scope[elem] = true; 
     }, 
     close: function() { 
      $scope.tabsOpen = false;  
     }, 
     about: { 
      open: function() { 
       $scope.aboutOpen = true;  
       tab.notification.close(); // Should work 
      }, 
      close: function() { 
       $scope.aboutOpen = false; 
      }   
     }, 
     notification: { 
      open: function() {/*etc*/}, 
      close: function() {/*etc*/} 
     }, 
     message: { 
      open: function() {/*etc*/}, 
      close: function() {/*etc*/} 
     }, 
    } 

    return tab ; 
} 

Таким образом, вы не полагаться на какой this контексте будет быть, который в любом случае определяется контекстом выполнения, а не там, где он определен. Здесь вы просто используете локальный объект tab, созданный в локальной области при вызове функции getTab, и вместо того, чтобы делать _this.notification.close();, вы можете просто сделать tab.notification.close();, где tab - это действительно this, который вы ищете там. A simple Demo

+0

Благодарим вас, это имеет большой смысл! – muudless

Смежные вопросы