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

时间:2016-05-06 09:32:33

标签: angularjs forms angularjs-ng-include

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

(实际上,它是一个包含的部分html文件;控制器位于部分内部)

是否可以检测控制器是否位于表单内?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:0)

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

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

感谢。

答案 1 :(得分:0)

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

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中(显示文本“在表单内”):

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

或没有ng-form(显示文本“在表单之外”):

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