2015-11-16 3 views
0

Я пытаюсь получить доступ к переменной области видимости внутри $scope.$on, но он возвращает undefined, но если я использую обычную переменную, она работает нормально.

Example: 

app.controller('myCtrl',function($scope){ 
this.a = "hello"; 
var b = "hi"; 
// some code 

$scope.$on('someEvent',function(scope,ele,attrs){ 
    console.log(this.a); // prints 'undefined' 
    console.log(b); //prints 'hi' 
}); 
}); 

ответ

2

В своем обратном вызове для $on значение this будет таким обратным. И поскольку вы не определили какое-либо свойство с именем a в этом обратном вызове, оно будет undefined.

app.controller('myCtrl',function($scope){ 
this.a = "hello"; 
var b = "hi"; 
// some code 
var that = this; // <<<<<<<<< 
$scope.$on('someEvent',function(scope,ele,attrs){ 
    console.log(that.a); // prints hello 
    console.log(b); //prints 'hi' 
}); 
}); 
+0

Yup, ошибка новобранец. Благодарю. –

1

вы должны использовать $scope.a вместо this.a. также, b используется неправильно.

ваш код должен выглядеть следующим образом:

app.controller('myCtrl',function($scope){ 
$scope.a = "hello"; 
$scope.b = "hi"; 
// some code 

$scope.$on('someEvent',function(scope,ele,attrs){ 
    console.log($scope.a); 
    console.log($scope.b); 
}); 
}); 

надежду, что помогает.

+0

Пожалуйста, обновите свой комментарий в 'console.log ($ scope.a),' 'показать печатает hello' – AdityaParab

+0

Я намеренно используя«это»использовать«контроллер как»синтаксис, следовательно, не хотят используйте $ scope. –

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