2016-07-04 2 views
0

У меня есть первый переход на инъекцию зависимости. Моя цель состоит в том, чтобы в конечном итоге просто включить некоторую простую связь между двумя контроллерами. Я даже не достаточно далеко, чтобы даже беспокоиться о связи с вторым контроллером. Я получаю «не ошибка функции» для 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> 
+0

Я изолировал проблему с невозможностью позвонить ContactMessages.AddNewContact внутри запроса $ HTTP. Я могу вызвать указанную функцию изнутри AddContact. –

ответ

1

enter image description here Привет изменить завод, как этого

app.factory('ContactMessages', [ 
    function() { 
     var o = {}; 

     o.AddNewContact = {}; 
     return o; 
    } 
]); 

для refrence https://plnkr.co/edit/sYSJ5ZOVQUX0ctir2EmM?p=preview

+0

Сделал изменения, как было предложено. Это приводит к тем же сообщениям об ошибках, что и раньше. –

+0

var self = this; u должен двигаться сверху не внутри this.AddContact = function(), перед this.newContact перемещать ваш var self = this; –

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