如何在多个控制器之间共享$scope对象
How to share a $scope object between multiple controllers
我在两个控制器之间共享$scope对象时遇到了问题。
在控制器'IssueBookCtrl'中,我像这样更新图书对象元素值。
scope.books美元[我]。已发布= true;
然后我使用$emit服务与控制器'BookListCtrl_Librarian'共享$scope对象。
美元范围。发出(update_parent_controller, scope.books美元)美元;
但是当我运行使用控制器'BookListCtrl_Librarian'的视图时,我看不到更新的对象。
controller.js
Controllers.controller('BookListCtrl_Librarian', ['$scope','$http','$location','$rootScope','BookData',
function ($scope, $http ,$location, $rootScope , BookData) {
$http.get('data/books.json').success(function(data) {
if($rootScope.books==='undefined'){
$rootScope.books = BookData.getData();
}
$scope.books = data;
});
$scope.options = ['bookId', 'cost'];
$scope.$on("update_parent_controller", function(event, books){
$scope.books = books;
});
$scope.issue = function(bookId) {
for (var i = 0, len = $scope.books.length; i < len; i++) {
if ($scope.books[i].bookId == bookId) {
$rootScope.book = $scope.books[i];
break;
}
}
$location.path('/issue/'+bookId);
}
$scope.return = function (bookId) {
for (var i = 0, len = $scope.books.length; i < len; i++) {
if ($scope.books[i].bookId == bookId) {
$rootScope.book = $scope.books[i];
break;
}
}
$location.path('/return/'+bookId);
}
$scope.backToLogin = function() {
$location.path("/main");
}
}]);
Controllers.controller('IssueBookCtrl', ['$scope','$rootScope','$http','$routeParams','$location',
function ($scope,$rootScope, $http, $routeParams, $location) {
var Id=$routeParams.bookId;
$http.get('data/books.json').success(function(data) {
$scope.books = data;
});
$scope.issue = function(Id) {
alert("issued");
for (var i = 0, len = $scope.books.length; i < len; i++) {
if ($scope.books[i].bookId === Id) {
$scope.books[i].issued = true;
$scope.$emit('update_parent_controller', $scope.books);
$location.path('/home/librarian');
break;
}
}
}
}]);
请引导我,任何帮助都是非常感激的。
谢谢
你必须使用rootscope而不是scope emit
$rootScope.$emit('update_parent_controller', $scope.books);
和其他控制器
$rootScope.$on('update_parent_controller', function(event, books){
$scope.books = books;
});
您可以尝试在更改模型后强制使用摘要:
$scope.$apply();
但是我建议您构建一个Books服务来保存这些共享模型和逻辑。您可以在这里了解如何创建自己的自定义服务。
或者你可以嵌套你的控制器(把一个放在另一个里面),这样内部控制器可以通过使用$parent
变量来引用外部控制器的模型。
相关文章:
- AngularJS:ng之后,重复$scope值未按预期更新
- Facebook共享显示一个接一个的空白页面
- $ionicplatform内的$scope不;不起作用
- 通过javascript/html访问twitter共享iframe
- 在我的SPA应用程序中集成Facebook共享的问题
- 使用$scope方法时的ControllerAs语法
- 在索引.html和应用.js [node.js] 之间共享变量
- AngularJS:$q.dedefe()不能由工厂方法共享
- 如何将ngrepeat下的ngmodel绑定到$scope
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- 使用ui.grid与cellTemplate共享$scope
- 在 2 个不同的功能之间共享 $scope.数据
- AngularJs 在控制器和控制器之间共享$scope
- 如何与AngularJs在控制器之间共享$scope,我们可以从另一个控制器访问一个控制器的$scope
- 在指令作用域和控制器$scope之间共享数据
- 在angularjs $scope中使用JavaScript对象,并在控制器之间共享它们
- 如何管理ui-router或在不同的$state中共享$scope
- 如何在angularjs中的两个控制器之间共享$scope属性,而不是其值
- 如何在多个控制器之间共享$scope对象