从一个视图到另一个AngularJS的对象

时间:2015-01-15 01:25:51

标签: javascript angularjs

我有一些对象数组,用于加载菜单(基于用户)。这很好用。

<li class="sub-menu">
    <a href="javascript:;" >
        <i class="fa fa-th"></i>
        <span>Data Tables</span>
    </a>
    <ul class="sub" ng-repeat="data in myDataSets">
        <li><a ng-click="dataset(data)"  >{{ data.get('datasetName') }}</a></li>
    </ul>
</li>

然后我的控制器功能数据集结构如此

$scope.dataset = function(dataset) {
    $scope.DataPoints = dataset;
    $location.path('/datapoint');
}

然后我想在/datapoint视图上加载对象(数据集)属性。但是当我在/datapoint视图上加载时,我得到DataPoints数组是空白的,即没有保存任何内容。

我在console.log($scope.DataPoints)之前有一个location.path,看起来是正确的。

我将DataPoints声明为var DataPoints=[];,这与其他正常运行的函数类似。

编辑:/datapoint的代码

<div class="row mt">
   <center><h3> Main Page  {{DataPoints.length }}</h3><center>
       <table class="table">
        <tr>
           <th>Name</th>
           <th>Status</th>
           <th>Location</th>
       </tr>  
       <tr ng-repeat="test in DataPoints" >
           <td>{{ test.get('datapointName') }}</td>
           <td>{{ test.get('datapointNotes') }}</td>
       </tr>
</div>

2 个答案:

答案 0 :(得分:0)

而不是使用$ scope绑定它与$ rootScope绑定它,因为您需要在不同视图中使用Datapoints。但请记住在控制器中提供$rootscope的依赖关系。

$rootscope.DataPoints=dataset;

希望它有效。

答案 1 :(得分:0)

我想您正在使用ng-view并且有两个控制器,具有不同的范围。

重点是:您需要将数据从第一个控制器传递到第二个控制器......有两个选项可以执行此操作:

  1. 使用$ rootScope:您可以将属性存储在$ rootScope中($ rootScope是所有范围的父级),并从第二个控制器访问它...这将解决您的问题,但不是语义。 ..

  2. 创建服务(文档为here)。服务是懒惰启动的单例,因此您可以创建一个并用于将值存储在第一个控制器中并在第二个控制器中读取。

  3. 我更喜欢第二个选项,因为你可以:更加语义化,使用DI,并实现运行在服务中的值而不是传播它的逻辑。