从父

时间:2015-12-22 10:09:06

标签: angularjs controller angularjs-scope

我很难确定如何访问子范围数据。 我正在使用路由和ui-views来创建项目的流程,我有“向导”,它是父项,还有更多的子状态,每个都有不同的控制器。

这是我的“Wizard.html”文件,其中包含子视图的ui-view。

<div class="header">
    <button ng-click="someFunction()">Back</button>
    <button ng-click="createProject()">Next</button>
</div>

<div class="wizard-children-view" ui-view></div>

<div class="footer">
</div>

这些是路线:

.state('wizard', {
    url: '/wizard',
    abstract: true,
    views: {
        'wizard': {
            templateUrl: 'wizard.html',
            controller: 'WizardController'
        }
    }
})
.state('wizard.project', {
    url: 'project',
    controller: 'ProjectController',
    templateUrl: 'project.html'
})
.state('wizard.aboutus', {
    url: 'aboutus',
    controller: 'AboutUsController',
    templateUrl: 'aboutus.html'
})

在我的向导标题(这是父母)中,我有一个顶部栏,其中“后退”和“下一步”操作按钮一直停留在屏幕上。 我正在尝试使用这些按钮访问并在其中一个孩子中做一些事情。举个例子,我想让一个函数“Next”按钮调用一个验证子视图中的表单并创建一个新项目的函数,但问题是带有ng-click="createProject()"的按钮在父作用域中,所有表单的数据都在子范围内,所以它是未定义的.. 可以吗?

1 个答案:

答案 0 :(得分:0)

您可以使用子控制器中的$emit

$scope.$emit("foo", {name: "bar"});

现在,在您的父控制器中:

$scope.$on("foo", function(e, data) {
    // data.name == "bar"
});

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope