AngularJS控制器继承和执行顺序

菲利普·滕恩

我正在使用父/子Controller继承在Angular中工作,并且遇到一些我不理解的行为。

基本上,我在父控制器中的对象上设置属性,然后在子控制器中将其设置为其他值。在子控制器中的代码应运行之前我输出了在父控制器中设置的值但是,我看到子控制器代码已经运行并设置了值。

Parent.Controller.js

testapp.controller('ParentController', function($scope) {
  $scope.init = function() {
    $scope.myValue = 'Primitive value, defined in ParentController';
    $scope.myObject = {
      value: "Object property value, defined in ParentController"
    }
  } 

  $scope.init();
});

Child.Controller.js

testapp.controller('ChildController', function($scope) {
    $scope.init = function() {
    $scope.myValue = 'Primitive value, set in ChildController';
    $scope.myObject.value = "Object property value, set in ChildController";
  } 

  $scope.init();
});

HTML模板

<div ng-controller="ParentController" class="outer">
  1. Primitive value on scope: <span style="font-weight:bold">{{myValue}}</span>
  <br/>2. Object value on scope: <span style="font-weight:bold">{{myObject.value}}</span>
  <p>
    <div ng-controller="ChildController" class="inner">
      3. Primitive value on scope: <span style="font-weight:bold">{{myValue}}</span>
      <br/>4. Object value on scope: <span style="font-weight:bold">{{myObject.value}}</span>
    </div>
  <p>
  5. Primitive value on scope: <span style="font-weight:bold">{{myValue}}</span>
  <br/>6. Object value on scope: <span style="font-weight:bold">{{myObject.value}}</span>      
</div>

我本来希望#2显示由父控制器定义的对象的值,因为子控制器应该尚未执行(ng-controllerChildController指令位于此代码以南两行)。

这是一个朋克

如果有人可以帮助我理解这种行为,我将非常感激。

谢谢,

菲利普

弗洛里邦

何时执行哪个控制器都没有关系:由于作用域是在两个控制器之间继承的,因此myObject变量也是如此。

因此,当子控制器update时myObject.value,它使用 myObject其父控制器相同的值,因此您在HTML的两个位置都看到相同的值。

这是预料之中的,也是经常想要的。如果您不希望子控制器影响其父控制器,则应在该子控制器上定义一个新对象:

testapp.controller('ChildController', function($scope) {
  $scope.init = function() {
    $scope.myValue = 'Primitive value, set in ChildController';
    $scope.myChildObject =  {value: "Object property value, set in ChildController"};
  } 
});

PS:如果您console.log在父子init功能中都添加了一个,则会看到父控制器确实在子控制器之前被读取。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angularjs Typescript控制器继承和依赖注入

来自分类Dev

AngularJS中的控制器/指令继承

来自分类Dev

AngularJs:怀疑执行控制器

来自分类Dev

AngularJS控制器未执行

来自分类Dev

AngularJS控制器功能未执行

来自分类Dev

如何在angularjs中继承和重写控制器方法(java pendent)?

来自分类Dev

AngularJS:使用调用的控制器继承(或应用)

来自分类Dev

使用服务和控制器控制操作顺序

来自分类Dev

通过$ controller从基本控制器继承的单元测试AngularJS控制器

来自分类Dev

AngularJS控制器继承:“ this”未指向子控制器

来自分类Dev

AngularJS指令控制器和要求

来自分类Dev

AngularJS模块和外部控制器

来自分类Dev

RequireJS和AngularJS多个控制器

来自分类Dev

AngularJS模块和外部控制器

来自分类Dev

AngularJS控制器和工厂

来自分类Dev

angularJs组件和控制器

来自分类Dev

使用angularJS中的相同控制器功能执行GET和POST请求

来自分类Dev

WebAPI控制器继承和属性路由

来自分类Dev

Ninjaframework MVC控制器继承和路由

来自分类Dev

WebAPI控制器继承和属性路由

来自分类Dev

Rails引擎:控制器继承和路由

来自分类Dev

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

来自分类Dev

Ninjaframework MVC控制器继承和路由

来自分类Dev

从控制器 angularJS 更改元素顺序

来自分类Dev

如何从主干控制器执行 angularJS 控制器中的函数

来自分类Dev

AngularJS在指令模板中执行控制器功能

来自分类Dev

滚动事件AngularJS后在控制器中执行函数

来自分类Dev

AngularJS:在指令中从控制器执行功能

来自分类Dev

AngularJS控制器未在jsFiddle中执行