Angular中的全局事件处理程序

时间:2015-09-29 14:33:38

标签: javascript angularjs

我不知道如何处理我的角度应用程序中的事件。

我在.run()函数中设置了一些$ rootScope属性:

<Grid>
    <test:PickerPlugin x:Name="Picker" Grid.Column="0"  />        
    <TextBlock Text="{Binding ElementName=Picker, Path=Hue}" />        
</Grid>

我的HTML看起来像:

.run(['$rootScope', '$state', '$stateParams', '$location',
    function($rootScope, $state, $stateParams, $location) {
        $rootScope.something = "something_";
    }
]);

现在 - 当用户更改下拉列表值(active_project)时,我想将$ rootScope.something值更改为新值。

应该如何我做这件事?

编辑: 我不想在单控制器中制作它。如您所见,此下拉列表是OUTSIDE ui-view。所以处理程序应该在控制器之外的某个地方。如果没有,我将被迫在整个应用程序的每个控制器中处理此更改。

2 个答案:

答案 0 :(得分:1)

基本上,您需要编写ng-change来更新更新。 你的HTML将成为:

  <body class="dashboard" ng-app="app" ng-controller='myController'>

      <select ng-change='selectChanged()' ng-model='myModel' name="active_project" id="active_project">
          <option value=""></option>
      </select>    
    <div id="content" ui-view></div>


  </body>

您还需要定义一个控制器来监听该更改:

app.controller('myController', ['$scope', '$rootScope', function(scope, rootScope){
    scope.selectChanged = function(){
        rootScope.something = scope.myModel;
        alert(rootScope.something);
    }
}]);

我还添加了一个功能fiddle的链接。

在给你解决方案之后,我想补充一点,在rootscope中获得价值并不是一个好主意。如果您发布您想要实现的目标,可能会有人在这里指导您。

希望这有帮助。

答案 1 :(得分:0)

您可以使用ng-selected功能将选择ng-model分配给$rootScope

JSFiddle

HTML:

<div ng-app="app" ng-controller="dummy">
    <select name="active_project" ng-selected="selectIt()" ng-model="somethingFromSelect" id="active_project">
          <option value="hello">hello</option>
          <option value="world">world</option>
    </select>
    {{something}}
</div>

JS:

var app = angular.module("app", []);
app.run(['$rootScope', '$location',
    function($rootScope, $location) {
        $rootScope.something = "";
    }
]);
app.controller('dummy', ['$rootScope', '$scope', function ($rootScope, $scope) {
    $scope.selectIt = function () {
        $rootScope.something = $scope.somethingFromSelect;
    };
}]);
相关问题