我有两个简单的指令,我们称之为blue
和red
。我需要的是让他们以这样的方式工作:当我点击red
指令中的按钮时,blue
中的值会自动更新。反之亦然。
使用工厂做起来相当简单......直到功能更新数据变为$ http调用,只有在成功完成后才会更改数据。
我这里有一个没有$ http的工作插件: http://plnkr.co/edit/Dyy3AEu68OwjRqLahXMX?p=preview
这是我用$ http的尝试: http://plnkr.co/edit/FD2538Ji4NbvY5wrjYgz?p=preview
我错过了某些东西,或者它不是这样做的方法吗?我知道它可以使用$ broadcast来完成,但这对我来说似乎有些过分。
答案 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) {