2013-08-16 54 views
1

我有點困惑如何實現從成功的AJAX調用到我的RESTful服務器的回調。這是我如何獲取數據:

服務:

app.factory('Data', function($http) { 
    var factory = {}; 

    factory.get = function(id, success, error) { 
     $http.post("/api/"+id).success(success); 

    return factory 
    }; 

我更喜歡具有自定義功能(例如factory.get())來在我的控制器使用。

控制器:

app.controller('Ctrl', function($scope, Data) { 

    var onSuccess = function(data, status) { 
     // I want to append something to the DOM here 
     } 
    }; 

    $scope.get = function(id) { 
     Data.get(id, onSuccess) 
    }; 
}); 

在這裏我定義get函數我可以在HTML中使用,我有一個id傳遞。但是,我不知道如何訪問該元素,以便我可以在onSuccess函數中將JSON響應的信息附加到DOM。

我是否必須創建指令來完成此操作?這是進行AJAX調用的正確方法嗎?

回答

3

要使服務器響應在DOM內可訪問,它需要位於控制器的範圍內。

app.controller('Ctrl', function($scope, Data) { 
    $scope.get = function(id) { 
     Data.get(id).success(function(data, status) { 
      $scope.status = status; 
      $scope.data = data; 
     }); 
    }; 
}); 

現在,你可以簡單地指$scope.data作爲data的HTML裏面:

<div ng-repeat="item in data"> 
    {{item}} 
</div> 
+0

所以,如果我想 您可以通過成功的回調中返回的數據分配到$ scope變量做到這一點附加另一個元素,我應該已經創建它,但只是不顯示它,當我想顯示它改變ng-show爲真?我的AJAX通話可以完成嗎?因爲它們看起來有點雜亂 – arnoutaertgeerts

+0

如果您想要有條件地向DOM添加元素,那麼您可以使用v1.1.5中提供的'ng-if'指令。 – AlwaysALearner

+0

我明白,作爲Angular的最佳實踐,您應該將自己的邏輯保存在Controller中,並且僅在需要時纔會依賴'ng-if'的指令中的DOM操作。 – Roy