我知道你之前可能已经看过这个问题,但它真的有答案吗?我开始怀疑它。 简单地说,我正在使用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'功能从我的孩子控制器离开,这个'这个'关键字将引用父控制器实例而不是子控件,因为我想更改父控制器实例,所以我应该怎么做?
答案 0 :(得分:2)
为了尽可能清楚地回答您的问题,您首先必须了解Controller-As语法的实际工作方式。
使用Controller-As并不意味着您没有使用$scope
。实际上,$scope
仍然存在。 Controller-As是在$scope
上创建对象并将通过this
分配的属性附加到该对象的简写。在视图方面,此对象显式绑定到所有控件。你可以仍然引用$scope.vm.property
。但是,由于此方案中隐含$scope
,因此无需为其创建依赖关系。
仍然可以在嵌套方案中访问父控制器的vm
对象的属性,但如果每个控制器都由不同的名称引用,则仅。如果您的对象是outerScope
和innerScope
,那么在innerScope
的HTML模板中,您仍然可以引用outerScope.someProperty
。
但是,如果所有控制器都被命名为相同(即vm
),那么访问父控制器的唯一方法是通过子作用域的属性,该属性别名为$scope
属性,引入$scope
依赖。
实际上,每当你在另一个控制器中有一个控制器时,最里面的项目就是一个包含自己内容的指令,并通过隔离范围明确定义它需要哪些变量。但是,只要不需要,回退应该是内部控制器从外部控制器唯一地命名。