AngularJS - 在页面之间传递数据

ola*_*tom 66 angularjs

我是AngularJS的首发.我正在尝试从以下位置发送数据:

  • 页面A:范列表页面

  • 第B页:范更新页面.

当用户单击货车的更新链接时,我正在调用控制器并检索控制器中的货车详细信息.但是,我无法使用相同的控制器将面板详细信息分配给页面B(范更新页面)...错误"Cannot set property 'vanNumber' of undefined"

*** Page A: Van List ****

<form name="listVanForm" >
   <table>
   <tr> <td ng-controller="VanUpdateCtrl"><a href="#/van-update" ng-click="prePopulateForm(row.members.vanNumber.value )" class="btn btn-small btn-primary">update</a></td> </tr>
   </table>
</form>

*** Page B: Van Update ****

  <div class="container">
        <h2>Edit Van </h2>

        <form name="updateVanForm" novalidate="novalidate" class="form-horizontal" ng-submit="updateCard(formData)">
            <div class="control-group">
                <label class="control-label" >Van Number:</label>

                <div class="controls">
                    <input type="text" id="vanNumber" ng-model="formData.vanNumber" placeholder=""/>
                </div>
            </div>
        </form>
     </div>

*** VanUpdateCtrl **

   app.controller('VanUpdateCtrl', ['$scope', 'VanUpdateFactory', '$location',
                                      function ($scope, VanUpdateFactory, $location) {

        //callback for ng-init 'populateDD':    
        $scope.prePopulateForm = function (cardNoParam m) {

            alert('cardNo = '+cardNoParam);

            $scope.formData.cardNumber=cardNoParam;}
    }

So, $scope.formData.cardNumber OR $scope.formData in the destination page is not recognised.
Run Code Online (Sandbox Code Playgroud)

Waw*_*awy 122

您需要创建一个服务才能在控制器之间共享数据.

app.factory('myService', function() {
 var savedData = {}
 function set(data) {
   savedData = data;
 }
 function get() {
  return savedData;
 }

 return {
  set: set,
  get: get
 }

});
Run Code Online (Sandbox Code Playgroud)

在你的控制器A:

myService.set(yourSharedData);
Run Code Online (Sandbox Code Playgroud)

在你的控制器B中:

$scope.desiredLocation = myService.get();
Run Code Online (Sandbox Code Playgroud)

记得通过将myService作为参数传递来在控制器中注入myService.

  • 不适合我.在下一页上,似乎重新创建了服务,get()返回空. (12认同)
  • 是的,使用sessionStorage.setItem('key','value'); 在您的服务中存储它和sessionStorage.getItem('key')来检索它. (7认同)
  • 它很棒.但是如果我按ctrl + f5刷新第二页,服务将重置,页面因此而变空.如何缓存最后的`set`数据,以便在刷新控制器B的第二页时最后的数据不会丢失? (3认同)
  • @blackops_programmer你可以使用$ cookies或localStorage. (3认同)
  • @AlexisGamarra如果您阅读了评论,您将了解到您不能在两个不同的页面中拥有相同的控制器,每个控制器都是一个新实例. (2认同)

Yan*_*ang 8

如果您只需要在视图/范围/控制器之间共享数据,最简单的方法是将其存储在$ rootScope中.但是,如果您需要共享功能,最好定义一个服务来执行此操作.

  • @YangZang.感谢您分享此选项.要强调.您*可以*将数据存储到$ rootScope,然后从另一个视图中检索它.但是,与使用根/全局范围的任何快速解决方案一样,几乎总是有更好的解决方案.这个问题的**Angular**解决方案是通过共享服务传递您的数据. (3认同)

dop*_*ner 7

您应该做的是创建一个服务以在控制器之间共享数据.

很好的教程https://www.youtube.com/watch?v=HXpHV5gWgyk