У меня есть первый переход на инъекцию зависимости. Моя цель состоит в том, чтобы в конечном итоге просто включить некоторую простую связь между двумя контроллерами. Я даже не достаточно далеко, чтобы даже беспокоиться о связи с вторым контроллером. Я получаю «не ошибка функции» для ContactMessages.AddNewContact (response.data);Angularjs: инъекция зависимости. Ошибка «не является функцией»
Когда я использую self.ContactMessages.AddNewContact (response.data); Я получаю «Не могу прочитать свойство« AddNewContact »undefined»
Я просто хочу вызвать функцию AddNewContact на фабрике ContactMessages.
Это должна быть довольно простая процедура.
<html ng-app="myApp"><head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script>
var userName = 'some email'; //pseudo code
var app = angular.module('myApp', []);
app.factory('ContactMessages', [function()
{ var tmpContact = {};
this.AddNewContact = function(objContact){
this.tmpContact = objContact;
};
return tmpContact;
}]);
app.controller('ActionsController', function ($scope, $http, ContactMessages){
this.newContact = {
Email: "",
Type: "",
Frequency: "",
UserName: userName
};
var self = this;
this.AddContact=function()
{
$http({
method: 'POST',
url: 'some url', //pseudo code
data: this.newContact,
headers: { 'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function successCallback(response)
{ if(angular.isObject(response.data))
self.ContactMessages.AddNewContact(response.data);
}, function errorCallback(response) {
});
};
});
</script>
</head>
<body ng-controller="ActionsController as ActCtrl">
<div>
<form name="frmAddContact" noValidate>
<input placeholder="Contact Email" type="email" ng-model="ActCtrl.newContact.Email" required></input>
<select ng-model="ActCtrl.newContact.Type" required>
<option value="">Contact Type</option>
<option value="COLLEAGUE">Colleague</option>
<option value="FRIEND">Friend</option>
<option value="FAMILY">Family</option>
</select>
<select ng-model="ActCtrl.newContact.Frequency" required>
<option value="">Contact Frequency</option>
<option value="ANY">Any Time</option>
<option value="WEEKLY">Weekly</option>
<option value="MONTHLY">Monthly</option>
<option value="QUARTERLY">Quarterly</option>
<option value="YEARLY">Yearly</option>
</select>
<div >
<button ng-click="ActCtrl.AddContact()" ng-disabled="frmAddContact.$invalid" >Add Contact</button>
</div>
</form>
</div></body></html>
Я изолировал проблему с невозможностью позвонить ContactMessages.AddNewContact внутри запроса $ HTTP. Я могу вызвать указанную функцию изнутри AddContact. –