【问题标题】:Pass data from angular form to another controller将数据从角度形式传递到另一个控制器
【发布时间】:2016-06-08 06:29:06
【问题描述】:

我是 angularjs 的新手。我想将数据从 html 表单传递到另一个路由。

这是index.html

的部分
<div ng-app="myApp" ng-controller="HomeController">
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <div ng-view=""></div>
            </div>
        </div>
    </div>
</div>

这里是路线

var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(['$routeProvider', function ($routeProvider) {
   $routeProvider.when('/', {
   templateUrl: 'views/home.html',
   controller: 'HomeController'
});
$routeProvider.when('/about', {
  templateUrl: 'views/about.html',
  controller: 'AboutController'
});
}]);

当路由是 / 时,它会点击 views/home.html,其中有一个表单

<form action="#/about" ng-submit="submitData()">
    <input type="text" name="address" ng-model="user.address" />
    <input type="submit" />
</form>

我有一个用户服务,其实现是

myApp.factory("user", function () {
     return {};
});

我在 HomeController 中注入 user 服务,例如

 myApp.controller("HomeController", function ($scope, user) {
          $scope.user = user;
          // and then set values on the object

          // $scope.user.address = "1, Mars";    // when uncomment this line it can be accessed on AboutController? Why? Otherwise I cannot access user.address
          console.log($scope.user);
  });

不要在上面的代码中记下我的评论..

并将 user 传递给 AboutController,如

myApp.controller("AboutController", function ($scope, user) {
    $scope.user = user;
    // and then set values on the object
    $scope.user.firstname = "John";
    $scope.user.secondname = "Smith";
    console.log($scope.user);
});

这里是about.html

<p>
    {{ user.address }}
</p>

问题: {{user.address}} 不适用于 AboutController。我看不到任何输出......但是当我从上面的代码中删除评论时......它只在控制器中显示硬编码值我错过了什么?

这是工作演示http://ashoo.com.au/angular/#/

【问题讨论】:

    标签: javascript jquery angularjs model-binding


    【解决方案1】:

    目前,您的服务所做的只是将一个空白对象return {} 传递给任何注入它的控制器。您需要一种 getter/setter 方法,以便在您的 Home 视图中设置数据,并在您的 About 视图中检索它。

    所以你的服务可能看起来像这样:

    myApp.factory("user", function () {
    
         var dataObj = {};
    
         return {
                setData: function(data) {
                   dataObj.username = data.username;
                },
                getData: function() {
                   return dataObj;
                }
         };
    });
    

    现在您可以在 Home 控制器中设置数据:

    myApp.controller("HomeController", function ($scope, user) {
    
        $scope.submitData = function(data)  {  //pass in ng-model
           user.setData(data);  //call 'user' service to set data
        }
      });
    

    并从您的 About 控制器调用它:

    myApp.controller("AboutController", function ($scope, user) {
        $scope.user = user.getData();  //Assign 
        console.log($scope.user.username);
    });
    

    你的 html 看起来像:

    <form action="#/about" ng-submit="submitData(user.username)">
        <input type="text" name="address" ng-model="user.username" />
        <input type="submit" />
    </form>
    

    【讨论】:

    • 很棒的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多