【问题标题】:AngularJS Intercept and extend controller $scopeAngularJS 拦截和扩展控制器 $scope
【发布时间】:2013-02-27 17:58:30
【问题描述】:

我在我的应用程序中定义了许多可重用的功能,每个控制器都使用 $scope 变量。我不必每次都创建一个共享服务,有没有办法扩展 $scope 变量,以便我可以在任何地方使用我的扩展代码?

类似:

//I've tested this out and it doesn't work, but this is what I want to do.
angular.module('App',[]).config(['$scopeProvider',function($scope) {
  $scope.method1 = function() { ... };
  $scope.method2 = function() { ... };
}]);

后来:

var HomeCtrl = function($scope) {
  $scope.method1();
};

这可能吗?还是我需要创建一个共享服务,然后让 $scope 从每个控制器的第一行扩展?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    代替.config 尝试.run,这将完全符合您的要求。

    angular.module('App', []).run(['$rootScope', function($rootScope) {
      $rootScope.foo = function() {
         alert("WIN!");
      };
    }]);
    
    angular.module('App').controller('HomeCtr', ['$scope', function($scope) {
      $scope.foo(); #will call the alert
    }]);
    

    注意我只使用了module.controller,因为我喜欢它,var HomeCtrl = function($scope) {会有同样的效果。

    【讨论】:

    • 如果我只需要一组控制器继承 rootScope 而不是所有控制器怎么办?另外,如果我想一组控制器继承一些不是 rootScope 的父范围怎么办?
    • 所有控制器都将继承 rootScope,因为它们是子级。
    • 您只需使用 ng-controller 将父控制器放入 html 中,其中指定的控制器(在 html 中)将从它继承 <div ng-controller="Foo"><div ng-controller="Bar"></div</div>(Bar 控制器将从 Foo 继承)
    • 虽然这种方法有效,但它完全依赖于控制器的嵌套。相反,只需使用服务来扩展范围。
    • @matsko - 你有“使用服务扩展范围”的例子吗?
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多