2015-12-26 13 views
5

Jestem początkującym deweloperem w tworzeniu stosów MEAN i robieniem aplikacji Todo, w której tworzę arkusze zadań, a następnie zapisuję w todo w tym konkretnym arkuszu zadań za pomocą angularjs.Czy można wywołać określoną funkcję ze sterownika w angularjs?

Początkowo po prostu pobierałem wszystkie todos bez zastanawiania się, do którego arkusza zadań należy on, jak również do tworzenia todos w podróży. Teraz chcę go ulepszyć, aby pobrać todos tylko dla tego konkretnego arkusza zadań. Ponieważ dynamicznie chcę załadować to, używam routeProvider o wartości '/:TaskID', gdzie TaskID się zmienia. Więc jeśli TaskID istnieje, używam funkcji, w przeciwnym razie odzyskując wszystko.

coś takiego:

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; 
     }); 
    } 

Zamiast if-else, jest to możliwe, aby utrzymać je niezależne? Tak jak chcę, aby oba były użyteczne, usuwając ten warunek. Czy jest możliwe aby wywołać metodę tutaj: dla poszczególnych TaskID:

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

For All Todos:

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

Inną kwestią jest to, jak pokazać todos tylko dla tego konkretnego tasksheet chwilę tworzenie arkusza zadań?

Jak widać na zdjęciu, moja strona pokazuje wszystkie todos, zamiast tego, które jest jeszcze utworzony. Więc zamiast pokazywać wszystkie todos, powinien początkowo pokazać mi No Todos. Kiedy zacznę dodawać todos, powinienem zobaczyć tylko te zadania w tym arkuszu zadań. Jestem nieco zdezorientowany, w jaki sposób powinienem to osiągnąć?

+1

Oba są możliwe, można utworzyć zadania dwoma drogami”/all 'i' tasks /: taskId 'LUB zdefiniuj jedno zadanie trasy /: ID i podaj aktualny ID lub "Wszystko" jako parametr i wykonaj IF/ELSE jak teraz. – codin

+0

Nie musisz też wykonywać '$ scope.todos.push (data [i]);' i możesz całkowicie pominąć pętlę for, wykonując '$ scope.todos = data;' – codin

+0

Tak, to możliwe 'zadania/all' i 'tasks /: taskId', a nawet robię trochę tego. Ale jak nazwać te konkretne funkcje? Spowoduje to przeniesienie ich do kontrolerów, ale co z funkcjami? –

Odpowiedz

0

Jeśli chcesz wywołać te funkcje gdziekolwiek w kontrolerze oraz w szablonie można je przypisać do $scope zmiennej takich jak to:

$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)); 
} 
Powiązane problemy