当前位置: 首页 > 面试题库 >

扩展AngularJS控制器的推荐方法是什么?

令狐昌胤
2023-03-14
问题内容

我有三个非常相似的控制器。我想要一个控制器,这三个控制器可以扩展并共享其功能。


问题答案:

也许 不扩展控制器,但是可以扩展控制器或将单个控制器混合为多个控制器。

module.controller('CtrlImplAdvanced', ['$scope', '$controller', function ($scope, $controller) {
    // Initialize the super class and extend it.
    angular.extend(this, $controller('CtrlImpl', {$scope: $scope}));
    … Additional extensions to create a mixin.
}]);

创建父控制器后,其中的逻辑也将执行。有关更多信息,请参见$ controller(),但仅$scope需要传递值。所有其他值将正常注入。

@mwarren ,Angular依赖注入自动解决了您的顾虑。您所需要做的就是注入$ scope,尽管如果需要可以覆盖其他注入的值。请看以下示例:

(function(angular) {



    var module = angular.module('stackoverflow.example',[]);



    module.controller('simpleController', function($scope, $document) {

        this.getOrigin = function() {

            return $document[0].location.origin;

        };

    });



    module.controller('complexController', function($scope, $controller) {

        angular.extend(this, $controller('simpleController', {$scope: $scope}));

    });



})(angular);


<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.js"></script>



<div ng-app="stackoverflow.example">

    <div ng-controller="complexController as C">

        <span><b>Origin from Controller:</b> {{C.getOrigin()}}</span>

    </div>

</div>

虽然$ document在由’complexController’创建时未传递到’simpleController’中,但会为我们注入$ document。



 类似资料:
  • Requests 拥有很多强大有用的第三方扩展。这里概述了其中最好的几个。 Certifi CA Bundle Certifi 是一个精心准备的根证书集合,用来验证 SSL 证书的可信任度,同时还会验证 TLS 主机的身份。这是一个从 Requests 项目中剥离出来的项目。 CacheControl CacheControl 这个扩展能为 Requests 添加完整的 HTTP 缓存功能。这样你

  • 本文向大家介绍jquery控制页面的展开和隐藏实现方法(推荐),包括了jquery控制页面的展开和隐藏实现方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 【jquery代码】  【HTML代码】 以上就是小编为大家带来的jquery控制页面的展开和隐藏实现方法(推荐)全部内容了,希望大家多多支持呐喊教程~

  • 如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"MY_*.php"的形式进行二次开发。 例如您要对改phpcms/mood/index.php进行二次开发。您可以在与index.php同级的目录下建立"MY_index.php" MY_index.php代码如下: class MY_index extends index{ function __con

  • 本文向大家介绍扩展jquery easyui tree的搜索树节点方法(推荐),包括了扩展jquery easyui tree的搜索树节点方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 如下所示: 因为jquery easyui tree原生的搜索只支持ID搜索,所以扩展了jquery easyui tree搜索树节点的方法,使其支持节点名称的模糊匹配,并将不匹配的节点隐藏。 以上就是小编为

  • 问题内容: 我在中有一个列表对象。长按一个项目时,我要显示一个对话框,其中包含单击的项目中的数据。 所述使用数据的每个项目的结合和我能够显示用Log长按当从所选择的项目数据。 但是,当尝试显示对话框时,您需要转到,建议不要在对象中使用。 那么如何显示对话框? 谢谢,Ove 问题答案: 从概念上讲,ViewModel使我误认为是启动Dialog的错误位置。为了更简洁地执行此操作,我将把Recycle

  • 问题内容: 我正在阅读有关Angular验证的文章,并认为在我自己的项目中使用它会很好。它运行得非常好,我想在成功验证表单后在其他控制器中扩展它的访问方法。我尝试了各种方法来执行此操作,但似乎看不到$ scope对象中的方法。 我希望有人能告诉我我想念的东西才能完成这项工作。我叉了个笨蛋。 问题答案: 正确的方法是使用角度服务。例如: 这样,您可以在注入到的任何控制器中访问内部功能: 看到这个演示