如何在角度js

时间:2017-08-31 06:55:55

标签: angularjs angularjs-scope

我有SidebarController的视图,如下所示 -

<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) 
 } 
}

2 个答案:

答案 0 :(得分:1)

控制器不是共享功能的正确概念。使用工厂或服务。

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

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

然后,您可以将该工厂注入每个需要它的控制器,如:

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

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

另一种选择是使用广播/发射Patern。但我只会在真正需要的地方使用它: Usage of $broadcast(), $emit() And $on() in AngularJS

答案 1 :(得分: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>