【问题标题】:Send one controller value to another in angularjs with different views在具有不同视图的 angularjs 中将一个控制器值发送到另一个控制器值
【发布时间】:2015-04-24 05:06:49
【问题描述】:

我正在使用 ONSEN UI 构建一个移动应用程序。我正在使用 angularjs 作为支持 JavaScript 框架。

这是我如何在单个页面模板中拥有 2 个视图。

<ons-template id="categories.html">
    <ons-page ng-controller="directoryControl">
      <ons-toolbar>
        <div class="center">Directory Category List</div>
      </ons-toolbar>
      <ons-list>
        <ons-list-item modifier="chevron" class="list-item-container" ng-repeat="PostCategory in PostCategories">

          <ons-row ng-click="setCurrentCategory(PostCategory.slug); menu.setMainPage('directory-page.html')">
            <ons-col>
              <div class="name">
                {{PostCategory.title}}
              </div>
            </ons-col>
            <ons-col width="40px"></ons-col>
          </ons-row>
        </ons-list-item>
      </ons-list>
    </ons-page>
  </ons-template>


<!-- when i click on any row (List Item) -->


  <ons-template id="directory-page.html">
    <ons-page ng-controller="directoryCategoryListing">
      <ons-toolbar>
        <div class="center">Directory List</div>
      </ons-toolbar>
      <p style="text-align: center" ng-show="spinner">
          <ons-icon icon="spinner" class="spinner center" size="40px" spin="true"  fixed-width="true" ></ons-icon>
      </p>
      <ons-list>
        <ons-list-item modifier="chevron" class="list-item-container">
          <ons-row>
            <ons-col width="95px">
              <img src="images/location1.png" class="thumbnail">
            </ons-col>
            <ons-col>
              <div class="name">
                Some Title
              </div>

              <div class="desc">
                Some Description
              </div>
            </ons-col>
            <ons-col width="40px"></ons-col>
          </ons-row>
        </ons-list-item>
      </ons-list>
    </ons-page>
  </ons-template>

所以这是我的控制器的样子:

var module = angular.module('app', ['onsen']);

module.controller('directoryControl', function($scope, $http) {
ons.ready(function() {

                $scope.spinner = true;
                $scope.CurrentCategory = null;
                //some other code in between
                $scope.setCurrentCategory = function(categoryName){
                       $scope.CurrentCategory = categoryName;
                       console.log($scope.CurrentCategory);
                }

    });
});

/* Second CONTROLLER WHERE I WANT $scope.CurrentCategory value */

module.controller('directoryCategoryListing', function($scope, $http) {
ons.ready(function() {
                console.log($scope.CurrentCategory);
    });
}); 

我可以在第一个控制器中获得点击行(列表项)的值。但无法将其带到第二个。有什么办法可以做到吗?

模板结构是一种页面样式。 http://codepen.io/anon/pen/wavYzY供参考

谢谢! (提前)

【问题讨论】:

  • 我注意到了什么。如果您加载一个新的 html 页面(不是部分),它将不起作用。它将重置您的控制器值。每个 HTML 页面都有它自己的控制器实例。前段时间我有一个类似的问题,但仍然没有答案->stackoverflow.com/questions/28182967/…。不过我的解决方法不同。
  • 您好,实际上从行(列表项)的选择中我只想获取所有相应的值。所以我试图在这里获取“slug”,这样我就可以使用 json api 从我的 wordpress 网站中获取与该类别 slug 相关的数据。那么这里还有其他选择吗?

标签: angularjs onsen-ui


【解决方案1】:

使用 $rootScope 在控制器之间进行通信。参见codepen

使用此代码:

$scope.setCurrentCategory = function(categoryName){
       $scope.CurrentCategory = categoryName;
       console.log($scope.CurrentCategory);
       $rootScope.CurrentCategory=$scope.CurrentCategory;
 }

并将第二个控制器代码替换为:

 module.controller('directoryCategoryListing', function($scope, $http) {
    ons.ready(function() {
                    console.log($rootScope.CurrentCategory);//it will log 

        });
    }); 

【讨论】:

  • 这里的 $rootScope 是什么。我在 rootScope 上遇到错误。错误为 ReferenceError: $rootScope is not defined
  • 在第一个和第二个控制器中添加 $rootScope 作为依赖项
  • 只使用共享服务更常见且成本更低
  • 好的。我尝试在两个控制器中添加类似 module.controller('directoryControl', function($scope, $http, $rootScope) 的依赖项。但它似乎不起作用。
  • codepen.io/anon/pen/wavYzY 这是代码笔。你可以在这里试试。你会得到完整的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多