当前位置: 首页 > 面试题库 >

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

许自强
2023-03-14
问题内容

我有一个带有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);
}]);

管理控制器:

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>,我认为更好的方法是也为外部区域创建一个控制器。然后创建服务以在控制器之间共享数据:

<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:''};
});

可以这样注入:

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

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

这样,您不必依靠通过全局$ rootScope(有点像依靠javascript中的全局变量-出于各种原因的一个坏主意)或通过可能是也可能不是当下。

我创建了一个 plnkr
,试图显示
两种解决方案之间的差异。



 类似资料:
  • 问题内容: 我对所有页面都有一个通用模板,其中包含一个菜单栏,它位于.bar的外面。我位于其中一个页面的内部,我想将输入数据绑定到此模板区域(该区域位于与输入页面不同的控制器下) )。我的意思是当我输入名称时,该名称将出现在模板区域。可以吗?这是the **** 问题答案: 通过遵循始终具有“’ ”的“最佳实践”,可以很容易地避免使用基元出现此问题。在您的ng模型中 -观看3分钟值得。Misko演

  • 问题内容: 我有2个html页面,以及这两者都是“插入”到通过在URL dependending 属性和路由器供应商,作为我的AngularJS应用程序的一部分。 可以在AngularJS主页 的“连接后端” 下找到一个示例。 我的问题 :有没有办法动画化和之间的过渡? 问题答案: Angularjs 1.1.4现在引入了该指令以帮助动画化不同的元素,尤其是ng- view。 您也可以观看有关此新

  • 问题内容: 我是AngularJS的新手,怀疑我没有掌握一个概念。我也在使用Twitter Bootstrap,并且加载了jQuery。 工作流程:用户单击列表中的链接,“主”部分被更新,并且链接用户单击了活动类。 基本HTML标记: 在jQuery中执行此操作: 但是我无法弄清楚如何集成Angular和jQuery以完成此操作,因为我正在使用Angular从服务器获取主列表(以JSON形式)并更

  • 问题内容: 我在angular.js中有指令/类或问题。 Chrome可以正常运行,但是Firefox会通过或导致元素闪烁。恕我直言,它是由引起的转换/ 到,可能是Firefox的JavaScript编译器是有点慢,所以元素出现了一会儿,然后躲起来? 例: 问题答案: 尽管文档中没有提到它,但是将规则添加到CSS 可能还不够。如果您要在主体中加载angular.js或模板编译得不够快,请使用指令,

  • 问题内容: 我正在使用AngularJS构建动态Web应用程序。一个模板上可以有多个模板吗? 问题答案: 您只能拥有一个。 您可以通过多种方式改变其内容:,或者通过routeProvider映射不同的控制器和模板。

  • 问题内容: 我目前正在使用这段代码来呈现列表: 但是,该元素在某些浏览器上引起一些非常小的渲染缺陷。我想知道是否可以在没有div容器的情况下执行ng- repeat,或者通过其他方法来达到相同的效果。 问题答案: 正如Andy Joslin所说,他们正在研究基于注释的ng- repeats,但显然存在太多浏览器问题。幸运的是,AngularJS 1.2添加了对重复的内置支持,而无需使用新的指令和添