代码包含两个控制器teacher和render,teacher控制器在工厂share中设置值,render从工厂调用get()函数以在$scope.maincode中接收值,但console.log($scope.maincode)显示未定义。因此,HTML页面不呈现{{m.code}}值。下面是相关的片段。
控制器-1
app.controller("teacher",function($rootScope,$scope,$http,$location,$window,share){
$scope.load = function(){
$http.get('/getcode').success(function(data){
if(data.length>0){
$scope.message = "";
$scope.codes = data;
console.log($scope.codes);
}
else {
$scope.codes="";
$scope.message = "No code submissions yet";
}
})
$scope.send = function(id){
console.log(id);
$http.get("/code/"+id).success(function(data){
share.set(data);
$window.location.href ='/code';
})
}
});controller-2
app.controller('render',function($rootScope,$scope,share){
$scope.renders = function(){
$scope.m=share.get();
console.log($scope.m);
}
});工厂
app.factory('share',function(){
var data = {};
this.set = function(obj){
this.data = obj;
console.log(this.data);
}
this.get = function(){
return this.data;
}
return {
set: this.set,
get: this.get
}});
HTML文件
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<script src="js/angular.min.js"></script>
<script src="js/angular-route.min.js"></script>
<script src="js/angular-resource.min.js"></script>
<script src="js/app.js"></script>
</head>
<body ng-app="app" ng-controller="render">
<div data-ng-init="renders()">
{{m.code}}
</div>
<a href="/logout">Logout</a>
</body>
</html>HTMLFile-2(调用教师控制器)
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<script src="/js/angular.min.js"></script>
<script src="/js/angular-route.min.js"></script>
<script src="/js/angular-resource.min.js"></script>
<script src="/js/app.js"></script>
</head>
<body ng-app="app">
<div data-ng-controller="teacher">
<div data-ng-init="load()">
<div ng-repeat="code in codes" ng-show="codes">
<a href ng-click="send(code.id)">{{code.title}}</a>
</div>
</div>
<div>
<h4>{{message}}</h4>
</div>
</div>
<a href="/logout">Logout</a>
</body>我在谷歌上搜索了这个问题,阅读了有关类似问题的现有问题,但没有找到解决办法。请帮帮忙。
发布于 2016-10-18 14:28:00
由于您使用的是两个不同的页面,所以需要使用一些路由器,例如ngRouter或ui-router,或者使用localStorage。下面是使用localStorage的示例
app.factory('share', function () {
function set(obj) {
localStorage.setItem('share', obj);
}
function get() {
return localStorage.getItem('share');
}
return {
set: set,
get: get
}
});发布于 2016-10-18 15:09:56
在显示render和m.code时,您不会从承诺中得到结果。
要克服这一点,只需在从broadcast控制器中的get请求中获得值之后,将其放到作用域上。
`$rootScope.$broadcast('data-received');`现在,您可以在呈现controller中侦听此事件。
$scope.$on('data-received', function(event, args) {
$scope.m=share.get();
});控制器-1
app.controller("teacher",function($rootScope,$scope,$http,$location,$window,share){
$scope.send = function(id){
console.log(id);
$http.get("/code/"+id).success(function(data){
share.set(data);
$rootScope.$broadcast('data-received');
$window.location.href ='/code';
})
}
});控制器-2
app.controller('render',function($rootScope,$scope,share){
$scope.renders = function(){
$scope.m=share.get();
console.log($scope.m);
}
$scope.$on('data-received', function(event, args) {
$scope.m=share.get();
});
});这应该能解决你的问题。
https://stackoverflow.com/questions/40110702
复制相似问题