一尘不染

使用AngularJS中的“作用域”从另一个控制器调用一个控制器的方法

angularjs

我试图通过使用scope变量在第一控制器中调用第二控制器的方法。这是我的第一个控制器中的一种方法:

$scope.initRestId = function(){
        var catapp = document.getElementById('SecondApp');
        var catscope = angular.element(catapp).scope();
        catscope.rest_id = $scope.user.username;
        catscope.getMainCategories();
    };

我可以设置的值,rest_id但是getMainCategories由于某种原因我不能打电话。控制台显示此错误:

TypeError:对象#没有方法’getMainCategories’

有没有一种方法可以调用上述方法?

编辑:

我使用以下方法同时加载两个应用程序。

angular.bootstrap(document.getElementById('firstAppID'), ['firstApp']);
angular.bootstrap(document.getElementById('secondAppID'), ['secondApp']);

我肯定可以在这里使用服务,但我想知道是否还有其他选择可以这样做!


阅读 264

收藏
2020-07-04

共1个答案

一尘不染

您在两个控制器之间进行通信的最佳方法是使用事件。

范围文件

在此签出$on$broadcast$emit

在一般情况下,的用法angular.element(catapp).scope()设计为在角度控制器外部使用,例如在jquery事件中使用。

理想情况下,您将在控制器1中编写一个事件,如下所示:

$scope.$on("myEvent", function (event, args) {
   $scope.rest_id = args.username;
   $scope.getMainCategories();
});

然后在第二个控制器中

$scope.initRestId = function(){
   $scope.$broadcast("myEvent", {username: $scope.user.username });
};

编辑:意识到这是两个模块之间的通信

您可以尝试将firstApp模块包含为secondApp声明的依赖吗angular.module?这样,您就可以与其他应用通信。

2020-07-04