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

角度控制器(和作用域)继承如何工作

宗冷勋
2023-03-14
问题内容

我试图弄清楚控制器继承是如何工作的。我有三个控制器:

var myApp = angular.module('app', []);

myApp.controller('MainController', ['$scope', function($scope) {
    $scope.name = 'main';
    $scope.getName = function() {
        return $scope.name;
    };
}]);
myApp.controller('Child1', ['$scope', function($scope) {
    $scope.name = 'child1';
}]);
myApp.controller('Child2', ['$scope', function($scope) {
    $scope.name = 'child2';
}]);

和我的看法

<div ng-app='app'>
    <div ng-controller='MainController'>
        <div ng-bind='getName()'></div>

        <div ng-controller='Child1'>
            <div ng-bind='getName()'></div>

            <div ng-controller='Child2'>
                <div ng-bind='getName()'></div>
            </div>
        </div>
    </div>
</div>

但它们都显示“主要”。我该如何解决?

这是一个小提琴http://jsfiddle.net/g3xzh4ov/3/


问题答案:

这是一个如何在Angular中扩展控制器的示例。

myApp.service('baseCtrl', function () {
  this.name = 'base';
  this.getName = function() {
    return this.name;
  };
});

myApp.controller('MainController', ['baseCtrl', function (baseCtrl) {
  angular.extend(this, baseCtrl);
  this.name = 'main';
}]);
myApp.controller('Child1', ['baseCtrl', function (baseCtrl) {
  angular.extend(this, baseCtrl);
  this.name = 'child1';
}]);
myApp.controller('Child2', ['baseCtrl', function (baseCtrl) {
  angular.extend(this, baseCtrl);
  this.name = 'child2';
}]);

它要求使用controllerAs,它取代$scopethis,它是这样的情况特别好。

注意service,它是new在幕后使用的,而不是其他Angular服务类型的用法,因此this...可以将语句从控制器直接带到单独的服务。

有几种执行控制器继承的方法。

关于原始代码,Angular中没有“控制器继承性”。和$scope原型继承假设

$scope.getName = function() {
    return $scope.name;
};

$scope.name从定义它的上下文返回,MainController在您的情况下是函数。



 类似资料:
  • 问题内容: Angular Controller中的方法很少,它们不在scope变量上。 有谁知道,我们如何在Jasmine测试中执行或调用这些方法? 这是主要代码。 现在,在我的茉莉花测试中,我们正在传递“ handleSuccessOfAPI”和“ handleFailureOfAPI”方法,但是这些是未定义的。 这是茉莉花测试代码。 问题答案: 因为您将无法使用这些功能。当您定义一个命名的J

  • 我有这段代码,我看不出问题的根源在哪里,我在chrome控制台我的控制器中没有发现任何错误: 和在div-loadedthings中正确加载; 控制台中的newMsgs按照它应该的方式进行解析; 我让它为其他页面工作,但似乎我错过了这一页上的一些东西。我有

  • 本文向大家介绍AngularJS控制器继承自另一控制器,包括了AngularJS控制器继承自另一控制器的使用技巧和注意事项,需要的朋友参考一下 AngularJS里控制器继承,常用的就是作用域嵌套作用域。默认情况下,当前作用域中无法找到某个属性时,就会在父级作用域中进行查找,若找不到直至查找到$rootScope。 但有些情况下,rootScope下就是我们的controller,不可能将大量的公

  • 问题内容: 我们有下课: 输出为: 超 子 问题: 什么礼物?是父级的对象,哪个孩子作为字段保留? 如果是这样,抽象类的继承如何工作?您不能创建抽象类的实例。 如果不是,重写方法在哪里保留? 我尝试使用Google,但发现的只是关于如何继承类的常见信息。 更新: 您仍在告诉我明显的事情。也许我的问题没有引起误解,但我将尝试改写一下: 当我们使用调用方法时,您说的是,我们正在访问父级的方法。但是,如

  • 如果答案是否定的,如何将特定类的服务(例如,BookService)注入到控制器中?

  • 对于每个子类,我都有一个DAO和服务类,如、等。 在前端,用户可以通过Angular 2界面创建优惠券、销售或交易,所以我决定使用以下控制器: (CouponController、SaleController、DealController从PromotionController继承) 将包含所有子类通用的所有通用CRUD函数,并且在特定的控制器中,我将处理那些类的特定操作。 A)现在面临的问题是如