繁体   English   中英

AngularJs从另一个指令中调用Controller

[英]AngularJs calling Controller from another one in directive

我有一个Controller A ,它负责在<body>显示数据。 我还有另一个Controller B ,它位于指令中,用于显示导航。

我想将从Controller B接收的数据(例如字符串数组)传递给Controller A ,然后使Controller A调用方法将数据绑定到主体。

到目前为止,我已经找到了一种解决方案:将数据存储在模块中的var变量中,然后单击按钮进行访问。

还有其他方法可以使Controller B影响Controller A吗?

这是我的代码:

app.controller("Controller A", function($scope, $http){});

app.directive("Navigation", [function(){
return {
  restrict: "E",
  templateUrl: "navigation.html"
};
  }])
.controller("Controller B", function($scope, $http){});

谢谢。

您可以在指令中使用回调函数,只要有一些数据要传递,该函数就会由指令的控制器调用:

app.directive("navigation", [function() {
    return {
        restrict: "E",
        cb: '&cb',
        templateUrl: "navigation.html"
    };
}])
.controller("Controller B", function($scope, $http) {
    // Invoke the callback function passed to the directive
    // Of course this call can happen at any time of this
    // directive controller lifecycle
    $scope.cb('some data to pass to the callback function');
});

然后在呈现指令的控制器中定义此回调函数:

app.controller("Controller A", function($scope, $http) {
    $scope.callback = function(someData) {
        alert(someData);
    };
});

呈现指令时将通过:

<div ng-navigation cb="callback"></div>

现在,指令控制器可以将信息传递给呈现指令的原始控制器。

如果您需要类似的内容,则对于不相关的范围,可以使用服务或自定义事件。 幸运的是,Angular使处理自定义事件变得非常容易。

更新了您的小品,以显示这是可行的。 这里是症结所在:

在您的指令中,您可以执行此操作。 使用$ rootScope可以确保事件到达整个应用程序。

$rootScope.$broadcast('navClick','data send')

然后,在需要收听的地方执行以下操作:

$scope.$on('navClick', function(ev,data) {console.log(data)})

稀疏使用此技术。 过度使用它会使您难以遵循应用程序中的逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM