我试图在用户点击按住myNavigator.pushPage()请求的按钮时调用API端点。但是,我无法将$ http.get请求生成的$ scope数据传递给新页面。
如果我在 $ http.get 请求的.success中使用 console.log(' test'); 进行测试,我成功获得了控制台中的日志信息,但 $ scope.var ='某些'; 中保存的任何数据都不会传递到该页面!真的很困惑!
$scope.historyDetails = function(id){
var options = {
animation: 'slide',
onTransitionEnd: function() {
$http.get('http://xxx-env.us-east-1.elasticbeanstalk.com/apiget/testresult/testId/'+id).success(function(data) {
$scope.testscore = 'something'; // this is not getting passed to page!
console.log('bahh'); // But I see this in console
});
}
};
myNavigator.pushPage("activity.html", options);
}
页:
<ons-page ng-controller="HistoryController">
...
<span style="font-size:1.2em">{{testscore}} </span><span style="font-size:0.5em;color:#555"></span>
...
</ons-page>
答案 0 :(得分:1)
是的,因为两个页面都有不同的控制器,导致不同的范围。无法从一个范围访问变量到另一个范围。
因此,在这种情况下,一种解决方案可以使用rootScope服务。 根作用域是角应用程序中所有作用域的父作用域。 因此,只要您在该控制器中注入$ rootScope服务,就可以从任何其他范围访问根范围的变量。
了解有关rootScope检查this链接的更多信息。
祝你好运。更新1:
查看这些文章
https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
答案 1 :(得分:0)
正如Yogesh所说,你没有得到你的价值观的原因是因为如果你看$scope.testscore
并试图找到$scope
定义的位置,你会发现它是控制器功能的一个参数(因此它仅适用于该控制器)。
但是我们可以看到控制器已附加到页面上,而您正在推送另一页。
因此,在这种情况下,您有几种选择:
$rootScope
服务作为Yogesh建议(在这种情况下接受他的回答)。创建您自己的服务/工厂/等,执行与$rootScope
类似的操作。
(function(){
var historyData = {};
myApp.factory('historyData', function() {
return historyData;
});
})();
从技术上讲,你可能会让它更有意义,但也许在某些角度指南中可以更好地描述这些内容。
如果您有多个组件共享相同的数据,那么您可能只需将控制器定义在更高的级别 - 例如ons-navigator
- 这样它将包含所有页面。只有当您的应用程序非常小时才会这样做 - 不建议大型应用程序使用。
如果仅在activity.html
中需要此数据,您可以在该页面的控制器中获取该数据。例如:
myApp.controller('activityController', function($scope, $http) {
$http.get(...).success(function(data) {
$scope.data = data;
});
}
但我想你仍然需要得到一些身份证明。无论如何,如果你在这里做请求可能会更好,现在你只需要id,而不是数据。
你可以用var
指令欺骗它。如果您提供活动页面<ons-page var="myActivityPage">
,则可以通过myActivityPage
变量访问该页面。
你一直在寻找的东西 - 当你做的时候
myNavigator.pushPage("activity.html", options);
实际上,这些选项会保存在ons-page
的{{1}}内。
所以你可以做到
activity.html
在另一个控制器中,您的ID为myNavigator.pushPage("activity.html", {data: {id: 33}, animation: 'slide'});
。
如果你仍然坚持传递所有数据而不是id - 这是一个简单的例子。在2.0 beta的较新版本中(我认为自测试版6或7以来),所有方法myActivityPage.options.data.id
,pushPage
等都会返回一个承诺 - 它会解析为popPage
,从而使事情变得更容易。< / p>
ons-page
旁注:您可能想关闭5天前发布的问题,因为它与此相关(我当时肯定错过了)。