2016-07-19 9 views
2

Dies ist das erste Mal, dass ich eine Frage gestellt habe, auf die ich wirklich eine Antwort brauche. Ich hoffe, dass Sie einige Ihrer Antworten und Einsichten großzügig teilen.

Ich habe versucht, die JavaScript-Projekte Liste Tutorial auf der angularjs.org Homepage (das dritte Tutorial von der Oberseite der Homepage) zu replizieren, in denen sie eine Liste haben, denen Sie die Überschrift hinzufügen oder löschen können für dieses Tutorial heißt "Wire ein Backend." Nun, ich replizierte die Codezeilen für alle Zeilen für Zeile, und es sieht überhaupt nicht wie das fertige Produkt des Tutorials aus. Bei genauerer Betrachtung protokolliert die Konsole einen Fehler bezüglich der Abhängigkeiten von der Injektion. Der Code war die gleiche Linie, aber es hat immer noch nicht funktioniert. Hier ist der Code:

index.html:

<!doctype html> 
<html ng-app="project"> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular-resource.min.js"> 
    </script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular-route.min.js"> 
    </script> 
    <script src="https://cdn.firebase.com/js/client/2.0.4/firebase.js"></script> 
    <script src="https://cdn.firebase.com/libs/angularfire/0.9.0/angularfire.min.js"></script> 
    <script src="project.js"></script> 
    </head> 
    <body> 
    <h2>JavaScript Projects</h2> 
    <div ng-view></div> 
    </body> 
</html> 

projects.js:

angular.module('project', ['ngRoute', 'firebase']) 

.value('fbURL', 'https://ng-projects-list.firebaseio.com/') 
.service('fbRef', function(fbURL) { 
    return new Firebase(fbURL) 
}) 
.service('fbAuth', function($q, $firebase, $firebaseAuth, fbRef) { 
    var auth; 
    return function() { 
     if (auth) return $q.when(auth); 
     var authObj = $firebaseAuth(fbRef); 
     if (authObj.$getAuth()) { 
     return $q.when(auth = authObj.$getAuth()); 
     } 
     var deferred = $q.defer(); 
     authObj.$authAnonymously().then(function(authData) { 
      auth = authData; 
      deferred.resolve(authData); 
     }); 
     return deferred.promise; 
    } 
}) 

.service('Projects', function($q, $firebase, fbRef, fbAuth, projectListValue) { 
    var self = this; 
    this.fetch = function() { 
    if (this.projects) return $q.when(this.projects); 
    return fbAuth().then(function(auth) { 
     var deferred = $q.defer(); 
     var ref = fbRef.child('projects-fresh/' + auth.auth.uid); 
     var $projects = $firebase(ref); 
     ref.on('value', function(snapshot) { 
     if (snapshot.val() === null) { 
      $projects.$set(projectListValue); 
     } 
     self.projects = $projects.$asArray(); 
     deferred.resolve(self.projects); 
     }); 

     //Remove projects list when no longer needed. 
     ref.onDisconnect().remove(); 
     return deferred.promise; 
    }); 
    }; 
}) 

.config(function($routeProvider) { 
    var resolveProjects = { 
    projects: function (Projects) { 
     return Projects.fetch(); 
    } 
    }; 

    $routeProvider 
    .when('/', { 
     controller:'ProjectListController as projectList', 
     templateUrl:'list.html', 
     resolve: resolveProjects 
    }) 
    .when('/edit/:projectId', { 
     controller:'EditProjectController as editProject', 
     templateUrl:'detail.html', 
     resolve: resolveProjects 
    }) 
    .when('/new', { 
     controller:'NewProjectController as editProject', 
     templateUrl:'detail.html', 
     resolve: resolveProjects 
    }) 
    .otherwise({ 
     redirectTo:'/' 
    }); 
}) 

.controller('ProjectListController', function(projects) { 
    var projectList = this; 
    projectList.projects = projects; 
}) 

.controller('NewProjectController', function($location, projects) { 
    var editProject = this; 
    editProject.save = function() { 
     projects.$add(editProject.project).then(function(data) { 
      $location.path('/'); 
     }); 
    }; 
}) 

.controller('EditProjectController', 
    function($location, $routeParams, projects) { 
    var editProject = this; 
    var projectId = $routeParams.projectId, 
     projectIndex; 

    editProject.projects = projects; 
    projectIndex = editProject.projects.$indexFor(projectId); 
    editProject.project = editProject.projects[projectIndex]; 

    editProject.destroy = function() { 
     editProject.projects.$remove(editProject.project).then(function(data) { 
      $location.path('/'); 
     }); 
    }; 

    editProject.save = function() { 
     editProject.projects.$save(editProject.project).then(function(data) { 
      $location.path('/'); 
     }); 
    }; 
}); 

list.html:

<input type="text" ng-model="projectList.search" class="search-query" id="projects_search" 
     placeholder="Search"> 
<table> 
    <thead> 
    <tr> 
    <th>Project</th> 
    <th>Description</th> 
    <th><a href="#/new"><i class="icon-plus-sign"></i></a></th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr ng-repeat="project in projectList.projects | filter:projectList.search | orderBy:'name'"> 
    <td><a ng-href="{{project.site}}" target="_blank">{{project.name}}</a></td> 
    <td>{{project.description}}</td> 
    <td> 
     <a ng-href="#/edit/{{project.$id}}"><i class="icon-pencil"></i></a> 
    </td> 
    </tr> 
    </tbody> 
</table> 

detail.html:

<form name="myForm"> 
    <div class="control-group" ng-class="{error: myForm.name.$invalid && !myForm.name.$pristine}"> 
    <label>Name</label> 
    <input type="text" name="name" ng-model="editProject.project.name" required> 
    <span ng-show="myForm.name.$error.required && !myForm.name.$pristine" class="help-inline"> 
     Required {{myForm.name.$pristine}}</span> 
    </div> 

    <div class="control-group" ng-class="{error: myForm.site.$invalid && !myForm.site.$pristine}"> 
    <label>Website</label> 
    <input type="url" name="site" ng-model="editProject.project.site" required> 
    <span ng-show="myForm.site.$error.required && !myForm.site.$pristine" class="help-inline"> 
     Required</span> 
    <span ng-show="myForm.site.$error.url" class="help-inline"> 
     Not a URL</span> 
    </div> 

    <label>Description</label> 
    <textarea name="description" ng-model="editProject.project.description"></textarea> 

    <br> 
    <a href="#/" class="btn">Cancel</a> 
    <button ng-click="editProject.save()" ng-disabled="myForm.$invalid" 
      class="btn btn-primary">Save</button> 
    <button ng-click="editProject.destroy()" 
      ng-show="editProject.project.$id" class="btn btn-danger">Delete</button> 
</form> 

Dies ist der Fehler, die auf der Konsole zeigt sich: [$ Injektor: UNPR]? http://errors.angularjs.org/1.5.7/ $ Injektor/UNPR p0 = projectListValueProvider% 20% 3C-% 20projectListValue% 20% 3C-% 20Projects

Bitte helfen Sie, Ich weiß, dass es viele von euch gibt, die viel erfahrener sind, und ich hoffe natürlich, dass ich einige Antworten finde, weil ich nicht viel habe, an die ich mich wenden kann, und ich habe versucht, dies in den letzten paar Tagen herauszufinden , so demütig bitten Sie die Hilfe von Ihnen Veteranen-Codierer und weise Weisen des stackoverflow Reiches.

+0

wo ist der Code? – Sajeetharan

+0

Sie sollten auf den Fehler in Ihrer Konsole klicken, der eine Verbindung mit weiteren Informationen über den gegebenen Fehler öffnet. Scheint so, als wäre eine Abhängigkeitsinjektion nicht erfüllbar. – albert

+0

Hey Sajeetharan und Albert, danke für die Antworten, der Kommentar wurde mit dem tatsächlichen Code aktualisiert, es wäre sehr zu schätzen, wenn Sie sie ansehen könnten. – Marcode777

Antwort

1

Sie versuchen, projectListValue in Ihre Projects Service zu injizieren. Sie definieren und injizieren nie projectListValue, und es bricht, wenn es versucht, es zu bekommen.

-

Im Folgenden wird der Fehler beseitigen, indem der Injektion loszuwerden.

.service('Projects', function($q, $firebase, fbRef, fbAuth) { 
    var self = this; 
    this.fetch = function() { 
    if (this.projects) return $q.when(this.projects); 
    return fbAuth().then(function(auth) { 
     var deferred = $q.defer(); 
     var ref = fbRef.child('projects-fresh/' + auth.auth.uid); 
     var $projects = $firebase(ref); 
     ref.on('value', function(snapshot) { 
     self.projects = $projects.$asArray(); 
     deferred.resolve(self.projects); 
     }); 

     //Remove projects list when no longer needed. 
     ref.onDisconnect().remove(); 
     return deferred.promise; 
    }); 
    }; 
}) 
+0

Entschuldigung, ein bisschen ein Neuling zu sein, aber wie kann ich das im Code beheben? Danke Dylan ... btw StackOverflow ist erstaunlich für die relativ schnellen Antworten! – Marcode777

+0

Der Code erwartet, dass 'projectListValue 'da ist, aber es ist nicht, der Fix würde es dort bekommen. Ich bin nicht vertraut mit dem Tutorial, aber wenn Sie nur ein Projekt aus dem Regal verwenden, das nur funktionieren sollte, ist meine Vermutung, dass etwas fehlt. Kannst du das von dir verwendete Projekt verlinken? –

+0

hier gehen Sie Dylan https://github.com/Marcode777/carboncopy – Marcode777