如何在 AngularJS 中使用 stateParameters(不是路由)在视图之间传递数据
How to pass data between views using stateParameters (not routes) in AngularJS
我的应用程序中有一些视图,当从一个视图移动到另一个视图时,我很难显示数据。
我有一个新闻列表,当我单击特定新闻时,我希望显示该特定新闻的视图。这是我的代码:
我的 app.js :
.state('app.list', {
url: "/list",
views: {
'appScreen': {
templateUrl: "list.html",
controller: 'List.Ctrl'
}
}
})
.state('app.singleview', {
url: "/list/:newsId",
views: {
'appScreen': {
templateUrl: "single.html",
controller: 'SingleCtrl'
}
}
})
我的控制器:
ListCtrl.$inject = ['$http', '$scope', 'datacontext'];
function ListCtrl( $http, $scope, datacontext) {
$scope.list = [];
datacontext.getPosts().then(function (posts) {
console.log('posts', posts);
$scope.list= posts;
}, function(reason) {
alert(reason);
});
下面的控制器是给我看单条新闻的控制器,我写了一些代码但不正确。在 URL 中,我获得了 ID,但无法显示该 ID 的数据。
SingleCtrl.$inject = ['$scope', '$stateParams', 'datacontext'];
function ListNewCtrl($scope, $stateParams, datacontext) {
$scope.New = getNewsById($stateParams.newsId);
function getNewsById(id) {
datacontext.getPosts().then(function(posts) {
var found = null;
for (var i = 0; i < posts.length; i++) {
if (posts[i].id == id) {
found = posts[i];
break;
}
}
return found;
})
}
};
所以在这个控制器中,我想做的是获取 ID 并将其与 postsId 匹配,然后相应地显示数据,但它似乎不起作用
你对异步感到困惑。代码应该是
getNewsById($stateParams.newsId);
function getNewsById(id) {
datacontext.getPosts().then(function(posts) {
var found = null;
for (var i = 0; i < posts.length; i++) {
if (posts[i].id == id) {
$scope.New = posts[i];
break;
}
}
});
}
因此,当执行成功回调时,New
范围变量由找到的 post 初始化。
也就是说,我很难理解为什么您要从后端获取 post 的完整列表,而不是使用按 ID 返回单个 post 的 REST 服务。如果你这样做,它将减少到
function getNewsById(id) {
datacontext.getPost(id).then(function(post) {
$scope.New = post;
});
}
我的应用程序中有一些视图,当从一个视图移动到另一个视图时,我很难显示数据。
我有一个新闻列表,当我单击特定新闻时,我希望显示该特定新闻的视图。这是我的代码:
我的 app.js :
.state('app.list', {
url: "/list",
views: {
'appScreen': {
templateUrl: "list.html",
controller: 'List.Ctrl'
}
}
})
.state('app.singleview', {
url: "/list/:newsId",
views: {
'appScreen': {
templateUrl: "single.html",
controller: 'SingleCtrl'
}
}
})
我的控制器:
ListCtrl.$inject = ['$http', '$scope', 'datacontext'];
function ListCtrl( $http, $scope, datacontext) {
$scope.list = [];
datacontext.getPosts().then(function (posts) {
console.log('posts', posts);
$scope.list= posts;
}, function(reason) {
alert(reason);
});
下面的控制器是给我看单条新闻的控制器,我写了一些代码但不正确。在 URL 中,我获得了 ID,但无法显示该 ID 的数据。
SingleCtrl.$inject = ['$scope', '$stateParams', 'datacontext'];
function ListNewCtrl($scope, $stateParams, datacontext) {
$scope.New = getNewsById($stateParams.newsId);
function getNewsById(id) {
datacontext.getPosts().then(function(posts) {
var found = null;
for (var i = 0; i < posts.length; i++) {
if (posts[i].id == id) {
found = posts[i];
break;
}
}
return found;
})
}
};
所以在这个控制器中,我想做的是获取 ID 并将其与 postsId 匹配,然后相应地显示数据,但它似乎不起作用
你对异步感到困惑。代码应该是
getNewsById($stateParams.newsId);
function getNewsById(id) {
datacontext.getPosts().then(function(posts) {
var found = null;
for (var i = 0; i < posts.length; i++) {
if (posts[i].id == id) {
$scope.New = posts[i];
break;
}
}
});
}
因此,当执行成功回调时,New
范围变量由找到的 post 初始化。
也就是说,我很难理解为什么您要从后端获取 post 的完整列表,而不是使用按 ID 返回单个 post 的 REST 服务。如果你这样做,它将减少到
function getNewsById(id) {
datacontext.getPost(id).then(function(post) {
$scope.New = post;
});
}