单击控制器1中的按钮,应执行来自controller2的功能

时间:2017-09-13 11:43:17

标签: javascript angularjs

点击controller1中的按钮,应调用controller2中的功能。 我尝试过使用服务,但没有运气。

检查plunkr代码。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用broadcast从另一个控制器调用方法,而不是使用服务。

.controller('ctrl', [
        '$scope', 'svc',
        function($scope, svc) {
            $scope.fun = function() {
                $scope.$emit('sampleEvent')
            }
        }
    ])
    .controller('ctrl1', [
        '$scope', 'svc', '$rootScope',
        function($scope, svc, $rootScope) {
            $rootScope.$on('sampleEvent', function(ev) {
                $scope.fun2()
            })
            $scope.fun2 = function() {
                alert("hi");
            }
        }
    ]);

Demo

答案 1 :(得分:1)

如果你真的想用服务来做,你可以这样做

 (function() {
        angular.module('app', [])
            .service('svc', function() {
                var svc = {};

                svc.method = function() {
                   // And here you can call it
                    svc.fun2();
                    //on click from first controller it should open a alert box saying "hi"

                }
                return svc;
            })
            .controller('ctrl', [
                '$scope', 'svc', function($scope, svc) {
                  $scope.fun = function(){
                    svc.method();
                  }
                }
            ])
            .controller('ctrl1', [
                '$scope', 'svc', function($scope, svc) {

                    $scope.fun2 = function(){
                      alert("hi");
                    }

                   // inject your method to your service here when method is defined
                    svc.fun2 = $scope.fun2;
                }
            ]); 
    })();