Angularjs在从外部控制器加载控制器后添加回调

时间:2017-04-21 11:27:33

标签: javascript angularjs controller

在控制器加载到角度后,是否可以添加一个被称为的回调?我想从外部那个控制器听这样的事件!

我正在将我们的应用程序与现有的角度应用程序集成,我不想修改其源文件。为此,我需要能够使用自定义功能来加载控制器并增强其范围。但是,许多控制器没有在应用程序启动时加载,因此我需要能够在加载它们之后立即拦截它们(例如,在加载特定视图之后)并运行修改。

如何在不更改任何源文件的情况下实现这一目标。必须从第三方代码添加所有更改和侦听器。

示例代码:

awesome.js:

awesomeApp.controller('AwesomeController', ['$scope', function($scope) {
  $scope.awesomeFunction = function...
}]);

punyIntegration.js

(function() {
  $rootScope.$on('awesomeControllerHasBeenLoaded', function(controller) {
    controller.scope.punyFunction = function...
  });
})();

1 个答案:

答案 0 :(得分:0)

通过收听$rootScope事件,您可以实现此类功能。但是要在任何页面上而不是在特定视图上执行此操作,您必须通过$rootScope.$on("$viewContentLoaded", function($event, data) { //at this point the view has been loaded //and you have access to its scope (i.e the controller's scope) //via angular.element(any selector).scope() }); 进行收听,如下所示:

public static List<int> RemoveSmallest(List<int> numbers)
{
    var lowestIndex = -1;
    var lowest = Int32.MaxValue;

    for (var i = 0; i < numbers.Count; i++)
    {
        if (numbers[i] < lowest) {
            lowest = numbers[i];
            lowestIndex = i;
        }
    }

    var newList = new List<int>(numbers);
    newList.RemoveAt(lowestIndex);

    return newList;