Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度共享/在视图之间发送验证数据_Angularjs - Fatal编程技术网

Angularjs 角度共享/在视图之间发送验证数据

Angularjs 角度共享/在视图之间发送验证数据,angularjs,Angularjs,我正在尝试使用routeProvider和2个控制器制作2tabs应用程序。第一个选项卡是用户表单。在第二个选项卡上,我想向用户显示他输入的内容和验证消息 路由 project.config(["$routeProvider",function($routeProvider) { $routeProvider. when('/', {controller:'Ctrl1', templateUrl:'tab_1.html'}). when('/tab

我正在尝试使用routeProvider和2个控制器制作2tabs应用程序。第一个选项卡是用户表单。在第二个选项卡上,我想向用户显示他输入的内容和验证消息

路由

project.config(["$routeProvider",function($routeProvider)
    {
    $routeProvider.
        when('/', {controller:'Ctrl1', templateUrl:'tab_1.html'}).
        when('/tab1', {controller:'Ctrl1', templateUrl:'tab_1.html'}).
        when('/tab2', {controller: 'Ctrl2', templateUrl:'tab_2.html'}).
我使用工厂来存储数据

project.factory('userService', function(){
    return{valids: {}}
})
然后在我的2台电脑上打电话

project.controller('Ctrl1', ['$scope', '$rootScope', 'userService', function(scope, rootScope, userService){
scope.data=userService;
并在控制器html模板上分配变量

ng-model="data.input1"
加载页面(tab1)后,我可以访问输入的$dirty和$invalid值

scope.form.input.$invalid;
但据我所知,当用户切换到tab2时,controller1会刷新,而我现在只保存工厂数据和一些VAR,这些VAR是使用$on(“$routeChangeStart”函数)手动发送的

问题是,存储/发送/共享这些$dirty和无效变量的最佳和正确的方法是什么,以便在第二个控制器中访问它们? 怎么做呢

Mb我需要像这样将它们添加到工厂数据中

scope.data.valids.input_invalid = scope.form.input.$invalid;
scope.data.valids2.input_invalid = scope.form.input2.$invalid;
或者添加一些控制器(工厂/指令?)


或者在controller2/2作用域上手动编写验证函数(controller/factory/directive?

Manny D是正确的。解决问题的最佳方法是创建一个用于存储输入的服务,并将其注入每个控制器。看起来您可以为此调整userService

在处理输入的控制器中,您可以$watch表单,并在服务上调用setIsValid(scope.form.input.name,scope.form.input.valid)方法来存储表单更改时的状态。将每个输入的有效性存储在服务中的对象上


在另一个控制器中,您可以在作用域上添加对此服务的引用,然后将数据绑定到输入有效性对象的属性,以在UI中显示它们。

Manny D是正确的。解决问题的最佳方法是创建一个用于存储输入的服务,并将其注入每个控制器。看起来您可以调整userSer为了这个目的,我需要一种恶习

在处理输入的控制器中,您可以$watch表单,并在服务上调用setIsValid(scope.form.input.name,scope.form.input.valid)方法来存储表单更改时的状态。将每个输入的有效性存储在服务中的对象上


在另一个控制器中,您可以在作用域上添加对此服务的引用,然后将数据绑定到输入有效性对象的属性以在UI中显示它们。

您是否考虑过编写一个服务来存储两个控制器都可以引用的用户输入/验证?我使用它来存储数据:project.factory('userService',function(){return{valids:{}}}其服务权限?我将输入绑定到此服务变量…但是如何处理scope.form.input2.$invalid和scope.form.input2.$dirty?您应该在视图控制器上进行表单验证。值应该是“提交的”当服务满意时发送给服务。除非我混淆了您在这里试图实现的目标,否则您不会希望在第二个选项卡中显示无效数据。您是否考虑过编写一个服务来存储两个控制器都可以引用的用户输入/验证?我使用它来存储数据:project.factory('userService',function(){return{valids:{}}}它的服务权限?我将输入绑定到此服务变量…但是如何处理scope.form.input2.$invalid和scope.form.input2.$dirty?您应该在视图控制器上进行表单验证。值应该是“提交的”如果服务令人满意,您不会希望无效数据出现在第二个选项卡中,除非我不明白您在这里想要实现什么。