2017-08-31 76 views
0

我有一個觀點對SidebarController象下面這樣調用來自控制器的方法到另一個控制器 -如何角JS

<a ng-click="reachMe($event);$event.preventDefault()" ng-href="#/app/hello"> 

去之前我想打電話給reachMe鏈接()對檢查一些變化頁面,如果發生任何更改,需要顯示警報

function SidebarController($rootScope, $scope, $state, $location, SidebarLoader){ 
$scope.reachMe = function(event){ 

//here I want to call function isPageChanged() from StaticPageController 
//something like this 
// if StaticPageController.isPageChanged() return true 
// then show alert 
// else 
// $location.url($href) 
} 
} 
+0

提供一些代碼,請 – Jester

回答

1

更新1: 不知道這一點,但不妨一試。

<div ng-app="testApp" ng-controller="ControllerOne"> 

    <button ng-click="methodA();"> Call Another Controller</button> 

</div> 


<script> 
var app = angular.module('testApp', []); 
app.controller('ControllerOne', function($scope, $rootScope) { 
    $scope.reachMe = function() { 
    var arrayData = [1,2,3]; 
     $rootScope.$emit('callEvent', arrayData); 

     if($rootScope.isChanged){ 
     // Show Alert 
     }else{ 
     //Go to route 
     } 
} 

}); 
app.controller('ControllerTwo', function($scope, $rootScope,$state) { 
    $scope.checkSomethingChanged = function() { 
     alert("Hello"); 
     $rootScope.isChanged = true; 
    } 

    $rootScope.$on('callEvent', function(event, data) { 
    console.log(data); 
    $scope.checkSomethingChanged(); 
    }); 
}); 

以下方法爲我工作完美:

<div ng-app="testApp" ng-controller="ControllerOne"> 

<button ng-click="methodA();"> Call Another Controller</button> 

</div> 


<script> 
var app = angular.module('testApp', []); 
app.controller('ControllerOne', function($scope, $rootScope) { 
    $scope.methodA = function() { 
    var arrayData = [1,2,3]; 
     $rootScope.$emit('callEvent', arrayData); 
} 

}); 
app.controller('ControllerTwo', function($scope, $rootScope) { 
    $scope.reachMe = function() { 
     alert("Hello"); 
    } 

    $rootScope.$on('callEvent', function(event, data) { 
    console.log(data); 
    $scope.reachMe(); 
    }); 
}); 
</script> 
+0

我改進了我的問題..你可以請現在檢查,並提供解決方案 –

+0

我已更新答案,檢查出來 –

+0

偉大的解決方案..它的工作。非常感謝你 –

1

控制器不是共享功能的正確概念。使用工廠或服務。

var logicFactory = function() { 
    return { 
     methodA: function() { 

     }, 
     methodB: function() 
     { 
     } 
    }; 
} 

然後,可以在需要的地方等注入該工廠到每個控制器:

var ControllerA = function ($scope,logicFactory) { 
    $scope.logic = logicFactory; 
} 

ControllerA.$inject = ['$scope', 'logicFactory']; 

另一種選擇是使用廣播/發射百通。但我會用那只有在真正必要: Usage of $broadcast(), $emit() And $on() in AngularJS

+0

好吧,但我的方法使用來自控制器的模態/變量/指令。那些將在工廠工作? –

+0

我改進了我的問題..你可以請現在檢查,並提供解決方案 –