在组件控制器中获取模板表单

时间:2018-08-01 20:10:50

标签: angularjs angularjs-directive angularjs-components angularjs-forms angularjs-templates

我的问题/问题类似于this one,但有一个警告。

<ng-form name='frmCalllogEdit' dirty-tracking>
    <fieldset ng-disabled='$ctrl.saving'>
...
    </fieldset>
</ng-form>

在组件控制器中,我正在检查$ pristine / $ dirty,因此我需要访问组件控制器中的表单,但是我也正在使用指令进行脏表单跟踪,并且我需要能够进入指令中的表格:

    function dirtyTracking($window, $log, $transitions, $state, $mdDialog) {
        return {
            restrict: 'A'
            , link: function ($scope, $element) {

                function isDirty() {
***                var formObj = $scope[$element.attr('name')];
                return formObj && formObj.$pristine === false;
                }

// some irrelevant code snipped

            $window.onbeforeunload = function (event) {
                $log.debug({
                    type: 'CallLogEditController.$window.onbeforeunload'
                    , event
                });
                return isDirty() ? true : null;
            }

            }
        };
    }

在***行中使用另一个问题中提到的使用$ ctrl.frmCalllogEdit的解决方案会导致问题,因为当$ ctrl以表单名称出现时,formObj在该行之后未定义, -tracking指令不起作用。当我正常命名表单时(即不带$ ctrl。前缀,如frmCalllogEdit),则正确定义了formObj并且我的脏跟踪指令有效。我也尝试只是剥离$ ctrl。从分配给formObj之前的名称开始,但这也没有得到回报。

那么,除了使用$ scope之外,还有没有其他方法可以访问组件控制器中的表单,并且仍然使此脏跟踪指令保持工作?

0 个答案:

没有答案