如何从控制器引用表单

时间:2014-12-12 22:46:43

标签: angularjs angularjs-scope

背景: 我有一个像3个步骤的应用程序的AngularJs向导。向导步骤包含共享单个控制器的4个uiRouter状态。第一个状态是一个包含bootstrap药丸导航的抽象视图,其中ui-view作为其他3个嵌套状态的占位符。 3个嵌套状态具有包含唯一命名表单的单独视图。我想通过检查当前可见形式是否有效来控制父状态中的药丸导航;如果表单无效,那么我会隐藏/禁用用户点击下一个导航丸的功能。

注意:我正在使用uiRouter状态中声明的“controller as”语法。

问题: 我似乎无法从控制器中获取对当前可查看表单的引用。

这是我尝试过的: 1.在init调用中传递对表单可见表单的引用 - >我尝试写入控制台时收到未定义的错误 2.重命名表单,甚至传入范围引用,如以下链接所述: http://www.technofattie.com/2014/07/01/using-angular-forms-with-controller-as-syntax.html

演示: 这是一个显示意图的plnkr链接: http://plnkr.co/edit/YUnwoBD2dt4bzbfujJSW

控制器代码:

(function () {
    'use strict';

    angular
        .module('recquisitionManagement')
        .controller('RecquisitionEditCtrl', [RecquisitionEditCtrl]);

    function RecquisitionEditCtrl() {

        var vm = this;

        //  get ref to request form
        vm.setRequestForm = function(form) {
            vm.requestForm = form;
            console.log(form);

            // tried to call from form ng-init --> undefined response
        }

        //  console.log($scope.vm.requestForm);
        //  console.log(vm.requestForm);

        vm.recquisition = { id: 0, name: 'some name', date: 'date here' };
        vm.requestFormIsInvalid = true;    //this.requestForm.$valid;
        vm.approvalFormIsInvalid = true;


        if (vm.recquisition && vm.recquisition.id > 0) {
            vm.title = 'Edit';
        } else {
            vm.title = 'Create';
        }
    }
}());

有关如何获取所需表单参考的任何建议?

3 个答案:

答案 0 :(得分:1)

此处说明了多个选项:Can I access a form in the controller?

也可以重命名共享控制器名称的函数并尝试使用常见的角度练习。

答案 1 :(得分:1)

是这样的:

<form name="vm.theFormName">

然后您可以通过vm

访问它

答案 2 :(得分:0)

现在我迟到了但是你把ctrl作为一个数组传递,需要改变它:

.controller('RecquisitionEditCtrl', [RecquisitionEditCtrl]);

到此:

.controller('RecquisitionEditCtrl', RecquisitionEditCtrl);