得到孩子家长的控制器控制所有使用'控制器作为虚拟机“符号 [英] Get parent controller in child controller which all use 'controller as vm' notation

查看:119
本文介绍了得到孩子家长的控制器控制所有使用'控制器作为虚拟机“符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

父控制器设置为 parentCtrl为VM 和chield设置为 childCtrl为VMC 是没有名字的冲突,它工作得很好。

Parent controller set to 'parentCtrl as vm' and chield set to 'childCtrl as vmc' to be no name conflict and it works well.

如何才能在孩子控制器访问父控制器?

How can I get access to parent controller in child controller?

请注意,'$范围。$父母没有工作。

Note that '$scope.$parent' did not work.

推荐答案

要访问使用'$范围符号父控制器只使用'$范围。$父。

To access the parent controller using the '$scope' notation just use '$scope.$parent'.

然而,控制器VM符号缺乏细节,使得它与一些行为工作:

However the 'controller as vm' notation lacked a detail that makes it work with some behavior:

$范围。$父。 VM

app.controller('childCtrl', [
    '$scope', function ($scope) {
        var vmc = this;

        // To protected access as vmc.parent
        Object.defineProperty(vmc, 'parent', {
            get: function () {
                return $scope.$parent.vm;
            }
        });
    }
]);

不过更改父对象有可能以下angular.js文档中了解基本对象的副作用。

However changing the parent objects have side effects on primitive objects which may be understood in the following angular.js documentation.

<一个href=\"https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance\"相对=nofollow> JavaScript的原型继承

例如:

工作例如对JS斌

<section class="parent" 
         data-ng-controller="parentCtrl as vm">
  <input data-ng-model="vm.name">

  <!-- have to change the prefix after the 'as' not to have conflict -->
  <section class="child"
           data-ng-controller="childCtrl as vmc">
    <input data-ng-model="vm.name">
    <!-- same results -->
    <input data-ng-model="$parent.vm.name">
    <!-- same results -->
    <input data-ng-model="vmc.parent.name">
    <!-- same results -->
    <button data-ng-click="vmc.changeName()">Change name</button>
  </section>
</section>


(function(){
  var app = angular.module('app', []);
  app.controller('parentCtrl', [
        '$scope', function ($scope) {
            var vm = this;
            vm.name = 'Julia';
        }
    ]);
  app.controller('childCtrl', [
        '$scope', function ($scope) {
            var vmc = this;

            // To protected access as vmc.parent
            Object.defineProperty(vmc, 'parent', {
                get: function () {
                    return $scope.$parent.vm;
                }
            });
          vmc.changeName = function(){
            vmc.parent.name = 'Other ' + vmc.parent.name;
          };
        }
    ]);
})();

这篇关于得到孩子家长的控制器控制所有使用'控制器作为虚拟机“符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆