在同一状态的另一个模板中访问范围

时间:2015-02-01 20:48:16

标签: angularjs angular-ui-router

如何在同一状态下访问另一个模板中的$ scope? 在下面的代码中,我想从(通过使用)chart.html

访问控制器Grid中的函数
        .state('demo.content', {
            url: '',
            views: {
                'chart': {
                    templateUrl: './App/chart.html',
                    controller: 'Chart'
                },
                'grid': {
                    templateUrl: './App/grid.html',
                    controller: 'Grid'
                }
        })

2 个答案:

答案 0 :(得分:0)

我建议不要直接在另一个范围内调用函数。我建议使用$ broadcast和$ on机制,其中一个控制器广播另一个控制器可以订阅的消息。

以下是一个例子:

var app = angular.module('myapp', []);
app.controller('controller1', ['$scope', '$rootScope', function ($scope, $rootScope) {
    $scope.notify = function () {
        $rootScope.$broadcast('click', 'heres the message');
    };
}]).controller('controller2', ['$scope', '$rootScope', function ($scope, $rootScope) {
    $scope.$on('click', function (event, data) {
        $scope.message = data;
    });
}]);

这里有一个完整的小提琴:http://jsfiddle.net/6dbgo6pt/2/

文档在这里:https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

有一个实际的功能绑定('&'绑定),但指令中有。假设你有类似的东西:

<div ng-controller='mycontroller'>
    <div my-button-directive clickcallback='doSomething' />
</div>

然后在my-button-directive内,你可以使用&#39;&amp;&#39;对clickcallback属性的绑定。这样您就可以从指令中调用doSomething()范围内的mycontroller。但就像我说的那样,我并不认为这种情况适用于你。

答案 1 :(得分:0)

要访问另一个范围并不是好的样式。特别是当范围被隔离时。这就是为什么我建议你使用AngularJs Events。