使用AngularJs ControllerAs方法,如何从子控制器调用父控制器中的函数?

时间:2015-03-27 21:20:56

标签: angularjs

我知道你之前可能已经看过这个问题,但它真的有答案吗?我开始怀疑它。 简单地说,我正在使用controlleras语法,我在视图中访问父控制器成员表单没有问题,但是我不能从我的子作用域的构造函数中做到这一点。以下是我现在所拥有的一些代码:



    myapp.controller("ParentController", function() {
      this.selectedItem = {
        Id: 1,
        name: 'item1'
      };
      this.setSelectedItem = function(item) {
        this.selectedItem = item;
        //do other stuff
      }
    });
    myapp.controller("ChildController", function() {
      this.onItemChanged = function(newItem) {
        //How can I call the parent controller instance from here 

      }
    });




另请注意,我想调用" updateSelectedItem'功能从我的孩子控制器离开,这个'这个'关键字将引用父控制器实例而不是子控件,因为我想更改父控制器实例,所以我应该怎么做?

1 个答案:

答案 0 :(得分:2)

为了尽可能清楚地回答您的问题,您首先必须了解Controller-As语法的实际工作方式。

使用Controller-As并不意味着您没有使用$scope。实际上,$scope仍然存在。 Controller-As是在$scope上创建对象并将通过this分配的属性附加到该对象的简写。在视图方面,此对象显式绑定到所有控件。你可以仍然引用$scope.vm.property。但是,由于此方案中隐含$scope,因此无需为其创建依赖关系。

仍然可以在嵌套方案中访问父控制器的vm对象的属性,但如果每个控制器都由不同的名称引用,则。如果您的对象是outerScopeinnerScope,那么在innerScope的HTML模板中,您仍然可以引用outerScope.someProperty

但是,如果所有控制器都被命名为相同(即vm),那么访问父控制器的唯一方法是通过子作用域的属性,该属性别名为$scope属性,引入$scope依赖。

实际上,每当你在另一个控制器中有一个控制器时,最里面的项目就是一个包含自己内容的指令,并通过隔离范围明确定义它需要哪些变量。但是,只要不需要,回退应该是内部控制器从外部控制器唯一地命名。