我有一個典型的項目/任務/子任務CRUD應用程序,並且可以從頂級項目列表一直導航到子任務。AngularJS和鏈接的資源 - 如果存在,從範圍獲取
所有資源都被路由,例如,
/projects
獲得所有項目,
/projects/:id
得到一個具體的項目,
/projects/:id/tasks
讓所有任務特定項目,等等。
我渲染任務,像這樣:
<ul>
<li ng-repeat="task in tasks">
<a href="/tasks/{{task.id}}">
{{task.name}}</a> ...
負責的/tasks/:id
路由控制器獲取使用$routeParams
從後端API的數據,但我想知道如何從信息我已經加載任務在範圍內我鏈接從,例如是這樣的:
<ul>
<li ng-repeat="task in tasks">
<a href="/tasks/{{task.id}}" ng-click="useThisTaskInstead(task)">
<!-- ^^^^^^^^^^^^^^^^^^ -->
<!-- set this in the
target scope. -->
{{task.name}}</a> ...
我想要的目標控制器如果task
不在範圍只接觸後端API。
例如,地址欄中的URL也應該顯示爲http://example.org/tasks/5
。
UPDATE
東西我想這我不確定:
我有一個頂層ApplicationController
中,我定義:
$scope.cacheTask: function (task) {
$scope.task = task;
};
...然後在鏈接變爲:
<a href="/tasks/{{task.id}}" ng-click="cacheTask(task)">
...和在我的TaskController
:
if (typeof $scope.task !== 'undefined' && $scope.task.id == $routeParams.id) {
// nothing to do -- task already set in scope.
console.log("task already in scope");
} else {
console.log("fetching task");
// load task
$q.when(taskService.get($routeParams.id).$promise).then(function(task) {
console.log("task fetched from backend", task);
// set the task in scope
$scope.task = task;
});
}
對,所以不是讓'''cacheTask''設置範圍,而是在任務服務單例中設置一個緩存字段,然後每次調用taskService.get(id) ''? – opyate
是 - 如果'task'是數據訪問層(或ActiveRecord-y的東西)。否則,它將在持久層中處理。 '$ http'和$ resource'都具有啓用緩存的非常簡單的方法。 – timruffles
順便說一句 - 沒有必要用Service(或者Factory等)來後綴服務 - 服務是ng模塊系統的一個概念,而不是放在你的命名中的東西。 – timruffles