如何检查我的 AngularJS 控制器是否位于表单内

How to check if my AngularJS controller is located inside a form

我有一个控制器,我在两个不同的地方重复使用,但我希望控制器能够区分它是在编辑数据的页面中使用,还是在仅显示数据的页面中使用。这里的区别在于,在一个页面上,控制器位于 <... ng-form="someForm"> 标记内。

(实际上,它是包含的部分 html 文件;控制器在该部分中)

是否可以检测控制器是否位于窗体内部?如果可以,怎么做?

我找不到任何快捷方式来满足您的要求,但您可以做的一件事是在 $rootScope 中定义一个变量来跟踪控制器的行为。每次视图加载控制器时,它都会调用 javascript 文件中的定义函数。

所以想法是,在 $rootScope 中,您将定义一个标志,无论您是否加载了所需的控制器。然后您可以检查标志以了解它是否已加载。您也可以在标志上使用 $watch 以在加载时获得通知。如果有任何不清楚的地方,请告诉我。

谢谢。

我发现我可以创建一个可选地需要 form(而不是 ng-form)的指令,并且您可以检查它是否存在于 link 函数中。

someAngularModule
    .directive('formAware', [function(){
        return {
            require: '^?form',
            template: ' <div>{{isPartOfForm ? "Inside the form" : "Outside of the form"}}</div>',
            link: function(scope, element, attrs, formCtrl) {
                scope.isPartOfForm = (formCtrl !== null);
            }
        }
    }]);

该指令可以放在 ng-form 中(显示文本 "Inside the form"):

<div ng-form="myForm">
    <div form-aware></div>
<div>

或没有 ng-form(显示文本 "Outside of the form"):

<div>
    <div form-aware></div>
<div>