AngularJS $scope继承服务
AngularJS $scope inheritance service
我的代码有问题。我无法在我的数据服务中传递也无法 console.log 继承的 $scope.user。由于我在另一种看起来相同的情况下也遇到了这个问题,我猜这是因为回调。
主控制器创建用户
.controller('mainCtrl', function ($scope, dataService) {
dataService.getUser(function (response) {
$scope.user = response.data[0];
})
数据服务
.service('dataService', function ($http) {
this.getUser = function (callback) {
$http.get('mock/user.json')
.then(callback)
};
导航控制器(mainCtrl 的子级):
.controller('navCtrl', function ($scope, dataService) {
//$scope.user = "test";
console.log ($scope.user);
dataService.getNavItems($scope.user,function (response) {
$scope.navItems = response.data;
});
如您所料,如果我手动设置 $scope.user 它就可以正常工作。
控制器 'mainCtrl' 和 'navCtrl' 似乎有不同的作用域。如果 'navCtrl' 的范围是 'mainCtrl' 的子范围,您可以使用 $scope.$parent.user
访问它
在解决承诺时触发日志记录$scope.$parent.$watch('user', fucntion(newVal){console.log(newVal)})
如果没有,我建议有某种上下文,您可以在其中存储不同控制器使用的数据。
即使在浏览器控制台中也可以使用 angular.element('[ng-controller="mainCtrl"]').scope()
来查找作用域
实例化 navCtrl 时,promise 尚未解决。您可以做的是 return 来自 $http.get 的承诺,而不是直接在回调中设置 scope.user。然后将对 getNavItems 的调用包装在 promise 中。
这是假设,navCtrl 是 MainCtrl 的子项
.service('dataService', function ($http) {
this.getUser = function () {
return $http.get('mock/user.json');
}};
.controller('mainCtrl', function ($scope, dataService) {
$scope.userPromise = dataService.getUser();
})
.controller('navCtrl', function ($scope, dataService) {
$scope.userPromise.then(function(response) {
var user = response.data[0];
dataService.getNavItems(user, function (response) {
$scope.navItems = response.data;
});
});
})
两个控制器的作用域不同,因此如果您在另一个控制器中定义它,则它不会在一个控制器中定义。如果你想让它同时工作,只需使用 dataService。
.service('dataService', function ($http) {
this.getUser = function () {
$http.get('mock/user.json').then(function(data) {
this.user = data;
)}
};
然后在每个控制器中分别访问它,它将对两者都可用。
我的代码有问题。我无法在我的数据服务中传递也无法 console.log 继承的 $scope.user。由于我在另一种看起来相同的情况下也遇到了这个问题,我猜这是因为回调。
主控制器创建用户
.controller('mainCtrl', function ($scope, dataService) {
dataService.getUser(function (response) {
$scope.user = response.data[0];
})
数据服务
.service('dataService', function ($http) {
this.getUser = function (callback) {
$http.get('mock/user.json')
.then(callback)
};
导航控制器(mainCtrl 的子级):
.controller('navCtrl', function ($scope, dataService) {
//$scope.user = "test";
console.log ($scope.user);
dataService.getNavItems($scope.user,function (response) {
$scope.navItems = response.data;
});
如您所料,如果我手动设置 $scope.user 它就可以正常工作。
控制器 'mainCtrl' 和 'navCtrl' 似乎有不同的作用域。如果 'navCtrl' 的范围是 'mainCtrl' 的子范围,您可以使用 $scope.$parent.user
在解决承诺时触发日志记录$scope.$parent.$watch('user', fucntion(newVal){console.log(newVal)})
如果没有,我建议有某种上下文,您可以在其中存储不同控制器使用的数据。
即使在浏览器控制台中也可以使用 angular.element('[ng-controller="mainCtrl"]').scope()
来查找作用域
实例化 navCtrl 时,promise 尚未解决。您可以做的是 return 来自 $http.get 的承诺,而不是直接在回调中设置 scope.user。然后将对 getNavItems 的调用包装在 promise 中。
这是假设,navCtrl 是 MainCtrl 的子项
.service('dataService', function ($http) {
this.getUser = function () {
return $http.get('mock/user.json');
}};
.controller('mainCtrl', function ($scope, dataService) {
$scope.userPromise = dataService.getUser();
})
.controller('navCtrl', function ($scope, dataService) {
$scope.userPromise.then(function(response) {
var user = response.data[0];
dataService.getNavItems(user, function (response) {
$scope.navItems = response.data;
});
});
})
两个控制器的作用域不同,因此如果您在另一个控制器中定义它,则它不会在一个控制器中定义。如果你想让它同时工作,只需使用 dataService。
.service('dataService', function ($http) {
this.getUser = function () {
$http.get('mock/user.json').then(function(data) {
this.user = data;
)}
};
然后在每个控制器中分别访问它,它将对两者都可用。