角度共享/发送验证数据视图

时间:2013-10-18 15:18:08

标签: angularjs

我尝试使用routeProvider ng-view和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时,我理解控制器1刷新,我现在只有工厂数据和一些使用$ on手动发送的变量(' $ routeChangeStart'功能

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

我需要将它们添加到工厂数据中,如此

scope.data.valids.input_invalid = scope.form.input.$invalid;
scope.data.valids2.input_invalid = scope.form.input2.$invalid;

或者添加一些控制器(工厂/指令?)?

或者在controller2 / 2范围内手动编写验证功能(controller / factory / directive?)?

1 个答案:

答案 0 :(得分:1)

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

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

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