在Directive的控制器功能中访问ngModel

时间:2014-04-01 23:27:26

标签: javascript angularjs angularjs-directive

我有一个自定义表单元素指令,其中包含一些子指令。我在父指令中需要ngModel,以便我可以在指令HTML声明中使用ng-model="object.data"

我遇到的问题是从子指令更改该值。子指令可以要求父控制器功能,但该控制器功能无法访问ngModelController函数可用的postLink({I}}错误。

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分配给范围,我可以在控制器函数方法中访问它,而控制器函数方法又可以通过子指令调用,但这看起来非常h​​acky并且必须有更好的解决方案,所以任何帮助都将是非常感谢。

请参阅我的Plunkr here

1 个答案:

答案 0 :(得分:0)

也许我不太明白你想要完成什么,但为什么不在元素上使用ng-click,并在父控制器中完全处理它?<​​/ p>

如果您需要修改父作用域中的内容,请将该对象注入子作用域。

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