2016-07-19 5 views
2

本当に答えが必要な質問をしたのはこれが初めてです。私は皆さんがあなたの答えと洞察力を惜しみなく分かち合うことを願っています。

私はJavaScriptプロジェクトのリストチュートリアルをangularjs.orgのホームページ(トップページの3番目のチュートリアル)に複製しようとしています。このチュートリアルでは、項目を追加または削除できるリストがあり、見出しこのチュートリアルでは、「バックアップを配線する」と呼ばれています。 まあ、私は、すべての行、行のためのコードの行を複製し、チュートリアルの完成品のようには見えません。密接に検査すると、コンソールは注入依存性に関するエラーをログに記録します。 コードは行ごとに同じでしたが、それでも機能しませんでした。

の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> 

これは、コンソール上に表示さエラーです、助けてくださいhttp://errors.angularjs.org/1.5.7/ $インジェクター/ UNPR P0 = projectListValueProvider%20%3C-%20projectListValue%20%3C-%20Projects

:[UNPR $インジェクタ]?私は経験が豊富な人がたくさんいることを知っています。私は多くのことに頼らずに答えを見つけてくれることを願っています。私は過去2〜3日間これを理解しようとしていますので、謙虚にあなたのベテランのコーダーの助けを要求し、賢明な賢者のstackoverflowの領域。

+0

ここでコードはありますか? – Sajeetharan

+0

コンソールでエラーをクリックすると、特定のエラーに関する詳細情報が表示されます。依存性注入が実行可能でないようです。 – albert

+0

ちょっとSajeetharanとアルバート、返信のおかげで、コメントは実際のコードで更新されている、あなたがそれらを見ることができれば非常に感謝しています。 – Marcode777

答えて

1

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

関連する問題