2016-05-31 8 views
1

(Lern AngularJS, Version 1.5.5) AliasingAngularJS 1.5.5 Vorlage nicht bei der Arbeit des Controllers

ich den Code unter

<form ng-submit="addCust.submit()" ng-controller="AddCustomerCtrl as addCust"> 
    <div> <input type="text" ng-model="addCust.cName" required/> </div> 
    <div> <input type="text" ng-model="addCust.cCity" required/> </div> 
    <div> <button id="f1" type="submit" >Add Customer</button> </div> 
</form> 

Die controller.js bekam ist enthält den Code unten

helloWorldControllers.controller('AddCustomerCtrl', ['$scope', '$location', 
    function AddCustomerCtrl($scope, $location) { 
     $scope.submit = function(){ console.log('AddCustomerCtrl.submit !'); 
     $location.path('/addedCustomer/' + $scope.cName + "/" + $scope.cCity); }; 
    } 
]); 

Alles ist in Ordnung, wenn ich die Kontrolle in HTML vermeiden Aliasnamen ("AddCustomerCtrl als addCust")

Ich weiß nicht, wo ich falsch liege. Jede Hilfe ist willkommen. Danke im Voraus !

(... ja, ich bin neu in AngularJS)

Juan

Antwort

2

Sie nicht $scope verwenden, wenn die Controller als Syntax. Ihr Controller sollte sein:

helloWorldControllers.controller('AddCustomerCtrl', ['$location', 
    function AddCustomerCtrl($location) { 
     this.submit = function(){ 
      console.log('AddCustomerCtrl.submit !'); 
      $location.path('/addedCustomer/' + this.cName + "/" + this.cCity); 
     }; 
    } 
]); 

Beachten Sie, dass, wenn Sie benötigen this zuzugreifen, wenn ein Versprechen löst Sie benötigen einen separaten lokalen Variable zu erstellen, da this nicht mehr im Kontext sein, wenn das Versprechen löst.

+0

Ich glaube nicht, dass dieser Code funktioniert, da dies die Submit-Funktion referenziert, nicht den Controller, wenn der Code ausgeführt wird. –

+0

@MikeFeltman Es wird gut funktionieren, wie durch [diese einfache JSFiddle] (https://jsfiddle.net/js5y0dxm/) bewiesen. – Lex

+0

Deine Geige zeigt das nicht wirklich, aber ich habe etwas hinzugefügt und es funktioniert. Es wird immer noch nicht empfohlen, dies auf diese Weise zu verwenden. –

0

Versuchen mit folgendem Controller-Code:

helloWorldControllers.controller('AddCustomerCtrl', ['$scope', '$location', 
    function ($scope, $location) { 
     var addCust = this; 
     addCust.submit = function(){ 
      console.log('AddCustomerCtrl.submit !'); 
      $location.path('/addedCustomer/' + $scope.cName + "/" + $scope.cCity); 
     }; 
    } 
]); 
0

Wenn Sie controllerAs nutzen die Eigenschaften überall mit dem Alias ​​referenziert werden. Also sollten Sie addCust.cName und addCust.cCity in Ihrem Code haben. Ich würde empfehlen, $ scope überhaupt nicht in Ihren Controller zu injizieren und alle Verweise darauf aus dem Code zu entfernen. Wenn Sie nicht damit vertraut sind, sind die allgemein anerkannten Best Practices dafür hier gut dokumentiert: https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md.

+0

Dies wird einen Fehler auf $ location.path wegen der Injection Mismatch werfen. – Lex

+0

Ja, ich habe das gerade bearbeitet, bevor du deinen Kommentar gepostet hast. –

Verwandte Themen