2016-04-05 2 views
4

J'essaye de construire le mécanisme de correspondance de mot de passe en utilisant directive angulaire et semble que je manque quelque chose. J'ai défini ng-app et ng-controller mais je reçois toujours un message d'erreur indiquant que le module n'est pas défini.

Jsfiddle here.AngularJs - Module défini mais toujours "non disponible" erreur

Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to: 
Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

HTML:

<div ng-app="myApp"> 
    <div class="row" ng-controller='Ctrl'> 
    <form name="form1"> 
     <div class="col-xs-12 col-sm-6 col-md-6"> 
     <div class="form-group"> 
      <input type="password" ng-model="login.password" name="password" id="password" class="form-control input-lg" placeholder="Password" tabindex="5"> 
     </div> 
     </div> 
     <div class="col-xs-12 col-sm-6 col-md-6"> 
     <div class="form-group"> 
      <input ng-model="login.verify" type="password" name="verify" placeholder="Confirm Password" nx-equal="login.password" class="form-control input-lg" tabindex="6"> 
      <div class="error" ng-show="form1.verify.$error.nxEqual">Passwords are not equal</div> 
     </div> 
     </div> 
    </form> 
    </div> 
</div> 

JS:

var app = angular.module("myApp", []); 
app.controller("Ctrl", function($scope){ 

}); 
app.directive('nxEqual', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, elem, attrs, model) { 

     if (!attrs.nxEqual) { 
     console.error('nxEqual expects a model as an argument!'); 
     return; 
     } 
     scope.$watch(attrs.nxEqual, function(value) { 
     model.$setValidity('nxEqual', value === model.$viewValue); 
     }); 
     model.$parsers.push(function(value) { 
     var isValid = value === scope.$eval(attrs.nxEqual); 
     model.$setValidity('nxEqual', isValid); 
     return isValid ? value : undefined; 
     }); 
    } 
    }; 
}); 
+0

avez-vous défini le contrôleur Ctrl? – thegio

+0

êtes-vous sûr que vous avez référé le contrôleur angulaire et le fichier 'js' de la directive sur la page? –

+0

Merci, j'ai fait, mais j'ai oublié de le mettre à jour. Même erreur – undroid

Répondre

3

Vous chargez votre script de bibliothèque au mauvais moment. Dans votre exemple JSFiddle, remplacez onLoad par No Wrap - in <head> (pour le blocage) ou No Wrap - in <body>. Cela assurera Angular a chargé de manière appropriée et nous sommes d'accord pour écrire notre code.

JSFiddle Link - violon mis à jour


Découvrez this answer: When do you put Javascript in body, when in head and when use doc.load? [duplicate] que j'ai trouvé assez simple sur le placement de chargement du script de bibliothèque externe. Aller de l'avant, ce sera la norme, au moins lors de la création d'exemples JSFiddle.

+0

OMG !! bonne prise ... agréable de vous voir après une longue période .. +1 –

+1

Occupé comme d'habitude mon ami :) @PankajParkar – scniro