2016-07-04 4 views
0

Ich habe meine erste Aufgabe bei der Abhängigkeit Injektion. Mein Ziel ist es, eventuell nur eine einfache Kommunikation zwischen zwei Controllern zu ermöglichen. Ich komme nicht einmal weit genug, um mich überhaupt um die Kommunikation mit dem zweiten Controller zu kümmern. Ich bekomme einen "ist kein Funktionsfehler" für ContactMessages.AddNewContact (response.data);Angularjs: Abhängigkeitsinjektion. "ist keine Funktion" Fehler

Wenn ich self.ContactMessages.AddNewContact (response.data) verwende; Ich bekomme "Kann nicht lesen Eigenschaft 'AddNewContact' von undefined"

Ich möchte nur die AddNewContact Funktion der Factory ContactMessages aufrufen.

Dies sollte ein ziemlich einfaches Verfahren sein.

<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

ich das Problem der Unfähigkeit ContactMessages.AddNewContact anrufen aus dem Inneren der $ http Anfrage isoliert haben. Ich kann diese Funktion innerhalb von AddContact aufrufen. –

Antwort

1

enter image description here Hallo Ihr Werk ändern wie diese

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

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

für refrence https://plnkr.co/edit/sYSJ5ZOVQUX0ctir2EmM?p=preview

+0

Die Änderungen wurden wie vorgeschlagen vorgenommen. Dies führt zu den gleichen Fehlermeldungen wie zuvor. –

+0

var selbst = das; du musst dich oben nicht innerhalb der this.AddContact = function() bewegen, bevor der this.newContact deine var self verschiebt = this; –