【发布时间】:2014-10-11 19:40:26
【问题描述】:
我有多页注册表单,我需要将数据保存到最后一步,以便用户可以跳转到任何一步进行编辑。
我使用服务“用户”作为所有六个步骤的单例对象。
userService.js
myApp.service('User',function($http,Auth,$location,$rootScope){
var register;
var c_user = [];
// Using Angular Devise plugin
// Sample user Response
// {"id":1,"email":"demo@gmail.com","mobile":"8951112312","name":"","admin":true,"created_at":"2014-06-25T12:07:33.000Z","updated_at":"2014-08-19T06:36:55.000Z"}
Auth.currentUser().then(function(user) {
c_user.push(user);
});
return {
register:register,
c_user:c_user
}
})
headerController.js
function headerController($scope,User) {
$scope.c_user = User.c_user;
$scope.reg = User.register;
$scope.$watch( function () { return User.register; }, function ( register ) {
$scope.reg = User.register;
});
}
signUpController.js
function signUpController($scope,User) {
$scope.$watch('user', function(user){
User.register = user;
});
}
此绑定有效,因此当我更改 $scope.user 时,服务变量会更新,这也会反映在其他控制器中。但是当我更改页面时,服务对象“User.register”正在重置。以下是我的路线和视图。
routes.js.erb
myApp.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
$locationProvider.html5Mode(true).hashPrefix('!');
.state('register',
{ url: "/register/:step",
templateUrl: "/assets/user/register.html",
controller: "signUpController" })
});
register.html
<div ng-show="step == 1">
<input type="text" ng-model="user.step1.name">
</div>
<div ng-show="step == 2">
<input type="text" ng-model="user.step1.email">
</div>
<div ng-show="step == 3">
<input type="text" ng-model="user.step1.mobile">
</div>
<a href="/register/{{1* step +1}}" ng-show="1* step < 3"> Proceed to Step {{1* step +1}}</a>
<a href="/register/{{1* step -1}}" ng-show="1* step > 1"> Back to Step {{1* step -1}}</a>
与上述问题无关
@apairet : HeaderController 场景
我将 AngularJs 与 rails 应用程序一起使用,其中我有应用程序布局和 ui-view。
<header>
<div class="logo-header" ng-controller="headerController">
<span class="logo"><a href="/"><img src="/assets/logo.png"></a></span>
<span class="header-icons pull-right">
<span ng-show="c_user[0]">
Hi, {{c_user[0].name}}
<a href="#" ng-click="logout()"> <i class="fa fa-stop"></i> </a>
</span>
<span ng-hide="c_user[0]">
<a href="/register/1">
<span>SIGN UP NOW<span>
</a> |
<a href="/login">
<span>SIGN IN NOW<span>
</a>
</span>
</div>
<div class="menu-header">
<paper-icon-button class="menu-icon" icon="menu"></paper-icon-button>
<span flex>MUTUAL FUNDS</span>
</div>
</header>
<body>
<div ui-view> </div>
</body>
我正在使用用户服务来存储当前用户信息和使用该服务的标头控制器。我最初尝试对标题使用相同的“signUpcontroller”
但是当我导航到注册页面时,控制器被启动了两次,所以我想创建单独的控制器来处理标题 UI 绑定。
【问题讨论】:
-
感谢您更新您的问题。 'c_user' 在哪里启动?您在视图中使用它,但在您的控制器中没有像 '$scope.c_user = ...' 这样的东西!是否可以设置 plunkr 或 jsfiddle?
-
@apairet :再次感谢您的快速回复,我更新了问题。如果上述更新不清楚,我将设置 Jsfiddle。
标签: angularjs angularjs-scope angular-ui angularjs-routing angular-services