我可以继承父控制器的变量吗?

dop*_*man 33 angularjs

这是我的代码:

function ParentCtrl($scope) {
$scope.people = ["Tom", "Dick", "Harry"];
$scope.count = $scope.people.length;
}

function ChildCtrl($scope) {
$scope.parentpeople = ParentCtrl.people //this is what I would like to do ideally
}
Run Code Online (Sandbox Code Playgroud)

controller在另一个内嵌一个角.我想将controller第一个变量传递给第二个变量.有谁知道如何做到这一点?

注意

我做不了类似的事情

ChildCtrl.prototype = new ParentCtrl();
Run Code Online (Sandbox Code Playgroud)

因为我会覆盖该people属性ChildCtrl.

Mar*_*cok 46

默认情况下,子范围原型继承父范围(请参阅范围),因此您已经可以访问子控件中父控制器的$ scope属性.为了证明这一点:

function ChildCtrl($scope) {
    alert($scope.people)
}
Run Code Online (Sandbox Code Playgroud)


kst*_*tep 25

你弄错了.您正在将控制器继承与范围继承混合在一起,它们在AngularJS中是不同的并且松散耦合.

你真正想要的是:

function ParentCtrl($scope) {
    $scope.people = ["Tom", "Dick", "Harry"];
    $scope.count = $scope.people.length;
}

function ChildCtrl($scope) {
    $scope.parentpeople = $scope.$parent.people;
}
Run Code Online (Sandbox Code Playgroud)

它适用于案例:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

但正如Mark和ganaraj在上面注意到的那样,这没有任何意义,因为你可以从ParentCtrl和ChildCtrl访问$ scope.people的属性.

如果要相互继承控制器,则需要使用控制器函数本身的原型继承.


gan*_*raj 9

$ scope继承基于使用ng-controller引用控制器的位置.

如果你有类似的东西

<div ng-controller="ParentController">
    <div ng-controller="ChildController">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后是的,子控制器将继承父控制器的属性.

注意:不需要在html中的直接子节点上定义子控制器.它可以是任何孩子.

  • 我可以在`Child's`HTML标记中使用`Parent`中的属性,但不能在`ChildController`的代码中使用.你知道如何在`Child`函数中使用`Parent's``people`属性吗? (2认同)