AngularJS Как внедрить зависимости при использовании контроллера как синтаксиса
Следуя функции "контроллер как", упомянутой в документации, я переделываю один из моих контроллеров в соответствии с синтаксисом, который они предложили. Но я не уверен, как внедрить службу $http в мою функцию search(), и это будет безопасно от минимизации?
customer.RequestCtrl = function () {
this.person = {};
this.searching = false;
this.selectedInstitute = null;
this.query = null;
this.institutes = null;
};
customer.RequestCtrl.prototype.search = function() {
this.searching = true;
this.selectedInstitute = null;
$http({method: 'GET', url: '/api/institutes', params: {q: this.query, max: 250}})
.success(function(data, status, headers, config) {
this.searching = false;
this.institutes = data;
})
.error(function(data, status, headers, config) {
this.searching = false;
this.institutes = null;
});
};
2 ответа
Решение
Просто вставьте в ваш конструктор контроллера, и вы можете присоединить его к экземпляру как свойство, как любое другое свойство.
customer.RequestCtrl = function ($http) {
this.person = {};
this.searching = false;
this.selectedInstitute = null;
this.query = null;
this.institutes = null;
this.$http = $http; //Or probably with _ prefix this._http = $http;
};
customer.RequestCtrl.$inject = ['$http']; //explicit annotation
customer.RequestCtrl.prototype.search = function() {
...
this.$http({method: 'GET', url: '/api/institutes', params: {q: this.query, max: 250}})
...
};
Другой способ - добавить переменную и запустить определение контроллера в IIFE.
(function(customer){
var $httpSvc;
customer.RequestCtrl = function ($http) {
this.person = {};
this.searching = false;
this.selectedInstitute = null;
this.query = null;
this.institutes = null;
$httpSvc = $http;
};
customer.RequestCtrl.prototype.search = function() {
...
$httpSvc({method: 'GET', url: '/api/institutes', params: {q: this.query, max: 250}})
...
};
angular.module('app').controller('RequestCtrl', ['$http', customer.RequestCtrl]);
})(customer);
Также вы можете попытаться объявить методы внутри конструктора
MyController = function($http) {
this.update = function() {
$http.get(...)
}
}