通过AJAX调用更新具有出厂值的指令数据

时间:2015-05-27 18:12:55

标签: javascript ajax angularjs angularjs-directive angularjs-factory

我有两个简单的指令,我们称之为bluered。我需要的是让他们以这样的方式工作:当我点击red指令中的按钮时,blue中的值会自动更新。反之亦然。

使用工厂做起来相当简单......直到功能更新数据变为$ http调用,只有在成功完成后才会更改数据。

我这里有一个没有$ http的工作插件: http://plnkr.co/edit/Dyy3AEu68OwjRqLahXMX?p=preview

这是我用$ http的尝试: http://plnkr.co/edit/FD2538Ji4NbvY5wrjYgz?p=preview

我错过了某些东西,或者它不是这样做的方法吗?我知道它可以使用$ broadcast来完成,但这对我来说似乎有些过分。

2 个答案:

答案 0 :(得分:2)

为您修正:http://plnkr.co/edit/rrowocPucUFAN6Ii1COf?p=preview

您在工厂中使用“数据”,并在成功回调中使用变量名称。

这是令人不快的部分:

myFactory.$inject = ['$http'];
function myFactory($http) {

    var data = {};

    data.blueData = 0;
    data.redData = 0;

    data.changeBlueData = function () {
        $http.get('http://httpbin.org/ip').
            success(function(response, status, headers, config) {  // Changed "data" to "response";
                data.blueData++;
            });
    };

    data.changeRedData = function () {
        $http.get('http://httpbin.org/ip').
            success(function(response, status, headers, config) {  // Changed "data" to "response"
                data.redData++;
            });
    };

    return data;
}

Response是一个更清晰的变量名,以及从AJAX返回的标准名称。

答案 1 :(得分:2)

问题出在这些方面:

success(function(data, status, headers, config) {

您已有数据变量,并且success function参数具有相同的名称。你应该把它改成像:

success(function(ajaxData, status, headers, config) {