【发布时间】:2013-10-18 15:18:07
【问题描述】:
我正在尝试使用 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 时,我理解 controller1 刷新,我现在只保存工厂数据和一些使用 $on('$routeChangeStart' 函数手动发送的变量
问题是 - 存储/发送/共享这些 $dirty 和无效变量以在第二个控制器中访问它们的最佳和正确方法是什么? 如何以角度方式做到这一点?
Mb 我需要像这样将它们添加到工厂数据中
scope.data.valids.input_invalid = scope.form.input.$invalid;
scope.data.valids2.input_invalid = scope.form.input2.$invalid;
或者添加一些控制器(工厂/指令?)?
或者在controller2/2范围内手动编写验证函数(控制器/工厂/指令?)?
【问题讨论】:
-
您是否考虑过编写一个服务来存储两个控制器都可以引用的用户输入/验证?
-
我用它来存储数据:project.factory('userService', function(){ return{valids: {}} }) 它的服务对吗?我将输入绑定到此服务变量...但是如何处理 scope.form.input2.$invalid 和 scope.form.input2.$dirty?
-
您应该注意视图控制器上的表单验证。当服务令人满意时,应该“承诺”服务。您不希望无效数据出现在您的第二个标签中,除非我混淆了您在此处尝试实现的目标。
标签: angularjs