首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表单呈现到$StateChangeStart中

问将表单呈现到$StateChangeStart中
EN

Stack Overflow用户
提问于 2016-12-16 06:23:41
回答 2查看 69关注 0票数 0

有什么方法可以让呈现的表单

$rootScope.on("$stateChangeStart",函数(){

})

我试过两件事。首先:使用$template请求,我使用templateURL获得了模板,并对其进行了编译,但它呈现的是预定义模板,而不是DOM呈现的模板。

见代码

代码语言:javascript
复制
if (fromState.name.length > 0) {
  $templateRequest(fromState.templateUrl)
    .then(function (html) {
       var compiledElement = $compile(html)($rootScope);
       var compliedForm = compiledElement.find('form');
    }
}

其次,我试着用

代码语言:javascript
复制
angular.element('document').find('form');

但它给了我属性列表。但是如何获得支票表格是有效的或无效的。

文档

​

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-16 10:15:52

我认为,当当前视图中的窗体无效时,您试图实现的是阻止状态更改。我会为此制定一个指令,比如:

代码语言:javascript
复制
app.directive("formValidStateCheck", function($rootScope) {
    return {
        restrict: "A",
        require: "ngForm",
        link: function(scope, element, attrs, ngFormCtrl) {
            $rootScope.$on("$stateChangeStart", function(event) {
                if (ngFormCtrl.$invalid) {
                    // prevent routing
                    if (!confirm("Are you sure"))
                        event.preventDefault();
                    }
                }
            });
        }
    }
});

也不愿把指令放在表格上:

代码语言:javascript
复制
<form ng-form="myForm" form-valid-state-check>

</form>
票数 1
EN

Stack Overflow用户

发布于 2016-12-16 08:14:52

.find()方法不适用于选择器和标记名。您需要通过表单id获得它(为此,需要对表单有一个id)。

然后使用angular.element(document.getElementById("#form_id"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41178433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档