我的问题/问题类似于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之外,还有没有其他方法可以访问组件控制器中的表单,并且仍然使此脏跟踪指令保持工作?