大图是 - 我打算在一个地方得到一个ajax调用,然后发送给我的所有控制器(大约有8个),并根据字符串答案设置一个显示/隐藏在所有这些。这似乎很简单,但我在解决问题方面遇到了一些麻烦。我能够弄清楚如何在2个控制器之间删除一个json对象,但这有点不同,所以我想我可能会以不正确的方式应用先前的逻辑。在控制器之间共享一个ajax repsonse
我设立了工厂,像这样
.factory('statusCheck', ['$http', function ($http) {
var currentId = self.location.search;
if(currentId[0] === "?"){
currentId = currentId.slice(1);
}
var stats = $http({
method: "GET",
url: "/getLessonDetails/" + currentId
})
.success(function(data, status, headers, config){
return data.status;
});
return stats;
}])
所有我想在这里做的是有它做Ajax调用所有的控制器之间共享(你可以忽略currentId部分)和返回数据。状态。然后在每个控制器中注入statusCheck并使用它。
一旦我statusCheck返回作为正确的字符串值(data.status将等于3个字符串中的1)我想在控制器中使用它来显示/隐藏的东西。我已经在每个控制器中设置了一个范围布尔值,名为$ scope.editorEnabled,它可以在我想要的显示/隐藏之间切换(如果设置为true或false。
因此,一旦我在控制器中拥有statusCheck它的价值,做这样的事情在控制器 -
if(statusCheck == "On"){
$scope.editorEnabled = true;
}else if(statusCheck == "Off"){
$scope.editorEnabled = false;
}else if(statusCheck == "ViewOnly"){
$scope.editorEnabled = false;
$scope.viewOnlyMode= true;
}
我不知道如果我的工厂,即使正常工作,但是当它我想确保我得到了ajax获取的字符串它会尝试之前在控制器中阅读这些if语句,因为它们没有被包裹在任何东西中,并且会立即触发。我不知道这个思想对角度是否有好处,我仍然在调整自己的过程。特德。谢谢阅读!
'$ http'返回一个承诺,所以这就是你从工厂返回......使用'.then()'访问控制器中的数据 – charlietfl 2014-09-10 14:02:14