我有通过控制器设置和变量的问题。
我创建服务
app.service('sharedProperties', function () {
var data = null;
return {
setProperty: function(value) {
data = value;
},
getProperty: function () {
return data;
}
};
});
我的控制员:
app.controller('articleCtrl', function($scope, $http, sharedProperties) {
$http.get('api/article')
.then(function(result){
articleData = result.data;
$scope.article = articleData;
sharedProperties.setProperty(articleData.id);
})});
app.controller('commentsCtrl', function($http, $scope, sharedProperties) {
id = sharedProperties.getProperty();
$http.get('api/article/'+id+'/comments')
.then(function(result){
commentsList = result.data;
$scope.comments = commentsList;
});
我需要" id"从我的commentsCtrl中的文章使用 - 它设置好,但是当我调用sharedProperties.get()时,它仍然返回默认值" null"。
任何想法如何解决这个问题?或者如何在评论控制器中使用文章控制器中的getted id?
非常感谢您的反馈!
答案 0 :(得分:0)
您可以尝试:
app.service('sharedProperties', function () {
this.data = null;
return {
setProperty: function(value) {
this.data = value;
},
getProperty: function () {
return this.data;
}
};
});
=============编辑=============
好的 - 既然我已经看到了你正在做的事情,那么这并不是最好的做事方式。您应该通过URL中的$ stateParams(或类似的$ params)引用文章的ID。有关示例,请参阅https://github.com/angular-ui/ui-router。基本上,有几种方法可以解决这个问题,因为你目前在你的plunkr中发生了竞争情况(即在你的第二个控制器需要它之前没有设置值)。在理想情况下,您只需拥有$stateParams.id
值,即" 1"或者你在路线中定义的任何东西。然后,当您初始化控制器时,只需传入$stateParams
,然后您就可以获得值。
您可以执行此操作的第二种方法(如果您需要在初始化控制器之前加载数据),则在路由中设置resolve
,以便在加载该状态之前命中api。在这种情况下,您可以在页面加载之前将注释传递给第二个控制器。
我希望这有帮助!