2016-11-23 6 views
1

Это мой контроллер:

var app = angular.module('myApp', [ 'ngMaterial' ]); 
app.controller('searchController',['$scope','$http',function($scope,$http) { 
    this.selectedItemChange = function(item) { 
     $http.get("url").then(function(response) { 
      this.initializeProfiles(); 
     }); 
    } 
    this.initializeProfiles = function() {} 
} 

Но я получаю ошибку TypeError: this.initializeProfiles is not a function.

Как мне получить доступ к initializeProfiles() внутри. Then $ http.get?

ответ

2

Вам нужна ссылка на элемент управления внутри обратного вызова, создайте его перед выполнением вызова на http.get.

var app = angular.module('myApp', [ 'ngMaterial' ]); 
app.controller('searchController',['$scope','$http',function($scope,$http) { 
    this.selectedItemChange = function(item) { 
    var me = this; // me = this 
    $http.get("url") 
     .then(function(response){ 
      me.initializeProfiles(); // me 
    }); 
    } 
    this.initializeProfiles = function() {} 
} 

Смотрите это свободно ТАК отвечать за руководство к тому, как this определяется в JavaScript: How does the "this" keyword in Javascript act within an object literal?.

+0

Это работает! Благодарю. Но почему это происходит? – pkyo

+0

@pkyo - это связано с 'this', ссылка меняется в зависимости от стека вызовов и неявно фиксируется в обратном вызове. Существует очень хороший ответ SO, объясняющий все детали этого «вопроса», дайте мне минуту, и я найду его. – Igor

+0

@pkyo - нашел его, я обновил свой ответ, чтобы включить его в конец. – Igor

0
var app = angular.module('myApp', [ 'ngMaterial' ]); 
    app.controller('searchController',['$scope','$http',function($scope,$http) { 
    var vm = this; 
    vm.selectedItemChange = function(item) { 
    $http.get("url") 
    .then(function(response){ 
     vm.initializeProfiles(); 
    }); 
} 
    vm.initializeProfiles = function() {} 
} 
Смежные вопросы