2016-07-19 3 views
2

Это первый раз, когда я задал вопрос, на который мне действительно нужен ответ. Я надеюсь, что вы, люди, щедро поделитесь некоторыми вашими ответами и соображениями.

Я пытался воспроизвести учебник по спискам проектов JavaScript на главной странице angularjs.org (третий учебник сверху страницы), в котором у них есть список, который можно добавлять или удалять из заголовка для этого учебника называется «Подключить бэкэнд». Ну, я реплицировал строки кода для всего, строка для строки, и она совсем не похожа на готовый продукт учебника. При ближайшем рассмотрении консоль регистрирует ошибку об инъекционных зависимостях. Код был таким же строковым, но он все еще не работал. Вот код:

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> 

Это ошибка, которая отображается на консоли: [$ Инжектор: unpr]? http://errors.angularjs.org/1.5.7/ $ форсунка/unpr p0 = projectListValueProvider% 20% 3C-% 20projectListValue% 20% 3C-% 20Projects

Пожалуйста, помогите, Я знаю, что многие из вас намного более опытные, и я, конечно, надеюсь, что найду ответы, потому что мне не с чем поработать, и я пытался понять это в течение последних двух дней , так смиренно просите помощи у вас ветеранов-кодеров и мудрых мудрецов в области стекирования.

+0

где код? – Sajeetharan

+0

Вы должны нажать на ошибку в консоли, которая откроет ссылку с дополнительной информацией о данной ошибке. Похоже, что инъекция зависимости не выполняется. – albert

+0

Hey Sajeetharan и albert, спасибо за ответы, комментарий был обновлен с фактическим кодом, было бы очень признательно, если бы вы могли посмотреть на них. – Marcode777

ответ

1

Вы пытаетесь ввести projectListValue в свой сервис Projects. Вы никогда не определяете и не вводите projectListValue, и он ломается, когда пытается его получить.

-

Следующая избавляется от ошибок, избавившись от инъекции.

.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

жаль быть новичком, но как мне это исправить в коде? Спасибо Dylan ... btw StackOverflow поразительно для относительно быстрых ответов! – Marcode777

+0

Код ожидает, что 'projectListValue' будет там, но это не так, исправление будет получать его там. Я не знаком с учебником, но если вы просто используете проект с полкой, который должен просто работать, я предполагаю, что чего-то не хватает. Можете ли вы связать проект, который вы использовали? –

+0

здесь вы идете Dylan https://github.com/Marcode777/carboncopy – Marcode777

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