javascript - AngularJS - 访问 ng-view 之外的元素

标签 javascript angularjs

我有一个 ng-view(管理面板)的设置,可以让我显示订单。我在 ng-view 之外有一个搜索框,我想用它来修改我的 json 请求。我看过一些关于访问标题等内容的帖子,但无法让它们工作 - 也许已经过时了。

主要应用内容:

angular.module('myApp', ['myApp.controllers', 'myApp.filters', 'myApp.services', 'myApp.directives', 'ui.bootstrap']).
config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider)       {

$routeProvider.
  when('/', {
    templateUrl: '/partials/order/manage.html',
    controller: 'ManageOrderCtrl'
  }).     
  when('/order/:id', {
   templateUrl: '/partials/order/view.html',
    controller: 'ViewOrderCtrl'
  }).   
  otherwise({
    redirectTo: '/'
  });
$locationProvider.html5Mode(true);
}]);

管理 Controller :

angular.module('myApp.controllers', [])
.controller('ManageOrderCtrl', ['$scope', '$http', '$dialog', 'config', 'Page', function($scope, $http, $dialog, config, Page) {

  // would like to have search value from input #search available here
  var getData = function() {
    $http.get('/orders').
    success(function(data, status, headers, config) {
      $scope.orders = data.orders;
    });
  };

getData();
})

查看:

<body ng-app="myApp" >
  <input type="text" id="search">
  <div class="ng-cloak" >
    <div ng-view></div>
  </div>
</body>

最佳答案

如果您要访问 <div ng-view></div> 之外的内容,我认为更好的方法是为外部区域创建一个 Controller 。然后您创建一个服务来在 Controller 之间共享数据:

<body ng-app="myApp" >
  <div ng-controller="MainCtrl">
      <input type="text" id="search">
  </div>
  <div class="ng-cloak" >
    <div ng-view></div>
  </div>
</body>

( ng-controller="MainCtrl" 也可以放在 <body> 标签上 - 那么 ng-view $scope 将是 MainCtrl $scope 的子级而不是同级。)

创建服务就像这样简单:

app.factory('Search',function(){
  return {text:''};
});

它可以这样注入(inject):

app.controller('ManageOrderCtrl', function($scope,Search) {
  $scope.searchFromService = Search;
});

app.controller('MainCtrl',function($scope,Search){
  $scope.search = Search;
});

这样你就不必依赖通过全局 $rootScope 共享数据(这有点像依赖 javascript 中的全局变量 - 出于各种原因,这是一个坏主意)或通过 $parent 作用域,这可能或可能不存在。

我创建了一个 plnkr that tries to show the difference介于两种解决方案之间。

关于javascript - AngularJS - 访问 ng-view 之外的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16028678/

相关文章:

javascript - 如何使用 Angular 使用 json 数据填充表?

php - 如何在 PHP 中限制文件上传大小?

javascript - 在 angularJS 中使用自定义 Canvas 指令不会显示任何内容

javascript - 'this' 是否始终指向模板中的当前范围?

JavaScript 对象 vs minimongo 效率

angularjs - 指令 'accordion' 要求的 Controller 'accordionGroup' 在 ui-bootstrap 中找不到错误

javascript - 使用回调函数调用 Ajax 服务

javascript - .options[e.selectedIndex].innerHTML 不抓取值

Javascript:以编程方式触发 onbeforeunload/onunload 事件

javascript - 通过电线将数据从 js 发送到 Controller