javascript - 在 AngularJS 中从 $parent 获取 Controller 名称

标签 javascript angularjs ng-grid

我已将我的一个 Angular Controller 转换为 Controller As 语法,但我无法让 ng-grid 模板正常运行。

Controller 有一个叫做编辑用户的功能,看起来像这样

self.editUser = function (user_data) {
    var modalInstance = $modal.open({
        templateUrl: '/admin/views/adminuser.html',
            controller: 'AdminUserController',
            resolve: {
                user_data: function () {
                    return user_data;
                }
            }
        });

        modalInstance.result.then(function () {
            self.myQueryData.refresh = !self.myQueryData.refresh;
        });
    };

ng-grid 模板看起来像这样

<div class="ngCellText" ng-class="col.colIndex()">
    <a ng-click="$parent.$parent.$parent.$parent.editUser({user_id:row.entity.id, first_name:row.entity.first_name, last_name:row.entity.last_name, email:row.entity.email})">
        <span ng-cell-text translate>Edit</span>
    </a>
</div>

我的路线是这样的

.when('/admin/settings', {
    templateUrl: '/admin/views/settings.html',
    controller: 'SettingsController as sc',
})

所以问题出在我调用时的模板

$parent.$parent.$parent.$parent.editUser 

它不知道我在说什么,除非我像这样包含 Controller 名称

$parent.$parent.$parent.$parent.sc.editUser, 

然后效果很好。但是我不想将此模板直接绑定(bind)到 sc Controller 。如何在不使用 Controller 名称的情况下调用 editUser?

我希望 $parent 上有一个函数可以提供像

这样的函数名称
$parent.$parent.$parent.$parent.getController().editUser

有什么建议吗?

最佳答案

您可以直接调用父作用域上的函数,而无需引用 $parent。因为稍后修改 View 结构时可能会遇到麻烦。

例子:

<div ng-app="MyApp">
<div ng-controller="MyController">
    {{myMessage}}
    <div ng-controller="MyController2">
        <div ng-controller="MyController3">
            <div ng-controller="MyController4">
                <button id="myButton" ng-click="setMessage('second')">Press</button>
            </div>
        </div>
    </div>
    <script>
        angular.module('MyApp', [])
           .controller('MyController', function($scope) {
            $scope.myMessage = "First";
               $scope.setMessage = function(msg) {
                $scope.myMessage = msg;
               };
        }).controller('MyController2', function($scope) {

           }).controller('MyController3', function($scope) {

           }).controller('MyController4', function($scope) {

           });
    </script>

</div>
</div>

否则你可以使用 angular $broadcast

关于javascript - 在 AngularJS 中从 $parent 获取 Controller 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442498/

相关文章:

angularjs - Protractor 不从自动完成搜索地址中选择第一个元素

javascript - 如何在 angularjs 拦截器中重定向,除非出现错误?

javascript - 在 jQuery UI sortable 中,如何获取拖动元素下方的元素

javascript - JQuery 没有从多个 .on() 调用中读取?

javascript - 是什么 ??! Javascript 中的运算符?

javascript - 包括在站点中的多个页面上持久检索的 json 数据...最佳实践?

javascript - Angular JS 中的 DOM 查询; $ (".myclass").each() 替代

javascript - ui.grid 行无法选择行

javascript - Angular ngGrid 在页面加载时选择行

angularjs - 第一页加载时未在 ng 网格中选择页面大小