簡體   English   中英

在指令的控制器功能中訪問ngModel

[英]Accessing ngModel in Directive's controller function

我有一個包含一些子指令的自定義表單元素指令。 我在父指令中需要ngModel ,以便可以在指令HTML聲明中使用ng-model="object.data"

我遇到的問題是從子指令更改該值。 子指令可能需要父控制器功能,但該控制器功能無權訪問ngModelController ,后者僅對postLink函數可用(在這里我可能錯了)。

ControllerLink函數都可以訪問同一作用域(在這種情況下,它並不總是正確的),因此我可以執行以下操作:

.directive('myDirective', [function() {
    return {

        ....

        controller: function ($scope, $element, $attrs) {
            this.select = function (selected) {
                $scope.ngModelCtrl.$setViewValue(selected);
            };
        },
        link: function (scope, elem, attrs, ngModelCtrl) {
            scope.ngModelCtrl = ngModelCtrl;

        }
    };
}])

.directive('myChildDirective', [function () {
    return {
        require: '^myDirective',
        ....

        link: function (scope, elem, attrs, myDirectiveCtrl) {
            elem.bind('click', function () {
                myDirectiveCtrl.select(scope.value);
            });
        }
    }
}]);

通過將ngModelController分配給作用域,我可以使用控制器功能方法來訪問它,而該方法又可以由子指令調用,但這似乎很hacky,必須有更好的解決方案,因此對您的幫助將不勝感激。

在這里看到我的Plunkr

也許我不太了解您要完成的工作,但是為什么不只對元素使用ng-click並在父控制器中完全處理呢?

並且,如果您需要修改父作用域中的某些內容,則將該對象注入子作用域中。

http://plnkr.co/edit/w4AcNdWPOdVsfy0OmEc6?p=preview

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM