2015-12-26 8 views
5

私はMEANスタック開発の初心者で、Todo Appをやっています。私はタスクシートを作成して、anglejを使って特定のタスクシートにtodoを格納しています。angularjsのコントローラから特定の関数を呼び出すことはできますか?

最初は、自分が所属するタスクシートを考慮せずに、すべてのtodosを取得していただけでなく、todosを作成していました。今私はその特定のタスクシートのためだけにtodosを取得するためにそれを強化したいと思います。私はそれを動的にロードしたいので、TaskIDが変更されている値'/:TaskID'のrouteProviderを使用しています。したがって、TaskIDが存在する場合、私は関数を使用しています。そうでなければすべてを取得します。

このような何か:代わりのif-elseを使っての

if($routeParams.TaskID) { 
     var id = $routeParams.TaskID; 
     Todos.getTodosForId(id) 
      .success(function(data) { 
       $scope.loading = false; 
       $scope.formData = {}; // clear the form so our user is ready to enter another 
       $scope.todos = data; // assign our new list of todos 
      }); 
    } else { 

    // GET===================================================================== 
    // when landing on the page, get all todos and show them 
    // use the service to get all the todos 
    Todos.get() 
     .success(function(data) { 
      for(var i = 0; i < data.length; i++) { 
       $scope.todos.push(data[i]); 
      } 
      $scope.loading = false; 
     }); 
    } 

、それは独立したそれらを維持することは可能でしょうか?私はそれらの両方を使用可能にして、その状態を取り除きたいと思っています。こっちメソッドを呼び出すことが可能です:特定のタスクIDの場合 すべてトドスについては

.when('/:TaskID', 
    { 
     templateUrl: "app.html", 
     controller: "mainController" 
    }) 

.when('/', 
    { 
     templateUrl: "app.html", 
     controller: "mainController" 
    }) 

もう一つの問題は、その特定tasksheetのしばらくの間、ドスを表示する方法であり、タスクシートの作成?

画像に示されているように、私のページが代わりに作成することがまだある一つで、すべてのドスを示しています。だから、すべてのtodosを表示する代わりに、それは最初に私にNo Todosを示す必要があります。私がtodosを追加し始めると、その作業シートの下にtodosだけが表示されるはずです。私はちょっと混乱しています。それを実現するにはどうすればいいですか?

+1

の両方が、次の2つの異なる経路のタスクを作成することができます可能であり、/all 'と' tasks /:taskId 'ORを指定するか、task /:IDを1つ定義し、実際のIdまたは' All 'をパラメータとして渡し、今のようにIF/ELSEを実行します。 – codin

+0

また、 '$ scope.todos.push(data [i]);'を実行する必要はありません。 '$ scope.todos = data;'を実行するだけでforループを完全にスキップできます。 – codin

+0

はい、可能です。/all'と 'tasks /:taskId'と私は少しでもやっています。しかし、それらの特定の関数をどのように呼び出すか?これはコントローラにドロップされますが、機能はどうですか? –

答えて

0

あなたのコントローラにし、テンプレート内の任意の場所にこれらの機能を呼び出したい場合は、このような$scope変数にそれらの属性ができます

$scope.cleanForm = function(data) { 
    $scope.loading = false; 
    $scope.formData = {}; 
    $scope.todos = data; 
}; 

$scope.loadForm = function(data) { 
    $scope.todos = data; 
    $scope.loading = false; 
}; 

if($routeParams.TaskID) { 
    var id = $routeParams.TaskID; 
    Todos.getTodosForId(id).success($scope.cleanForm(data)); 
} else { 
    Todos.get().success($scope.loadForm(data)); 
} 
関連する問題