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

AngularJS模块/范围共享

翁俊良
2023-03-14
问题内容

我最近开始使用AngularJS,现在构建应用的方式是这样的:

MainController.js

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

app.controller('MainController', function ($scope) {
    // do some stuff
}

SomeController.js

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

SomeController.controller('SomeController', function ($scope) {
    $scope.variable = "test";
    // do some otherstuff
}

Im遇到的问题是范围未在模块之间共享。例如,无法从 MainController 获得变量“ test”。

  • 最佳做法是什么?是否将所有控制器都以1个文件存储在1个模块中?
  • 我如何能有1个页面和2个控制器并$scope在它们之间共享,还是可以将所有内容仅放在一个控制器中?

问题答案:

您可以使用以下服务: 在此处进行实时演示(单击)。

JavaScript:

var otherApp = angular.module('otherApp', []);
otherApp.factory('myService', function() {
  var myService = {
    someData: ''
  };
  return myService;
});
otherApp.controller('otherCtrl', function($scope, myService) {
  $scope.shared = myService;
});


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

app.controller('myCtrl', function($scope, myService) {
  $scope.shared = myService; 
});

标记:

  <div ng-controller="otherCtrl">
    <input ng-model="shared.someData" placeholder="Type here..">
  </div>
  <div ng-controller="myCtrl">
  {{shared.someData}}
  </div>

这是一篇关于与服务共享数据的不错的文章。

您还可以嵌套控制器,以使父控制器的作用域属性被子作用域继承:http :
//jsbin.com/AgAYIVE/3/edit

  <div ng-controller="ctrl1">
    <span>ctrl1:</span>
    <input ng-model="foo" placeholder="Type here..">
    <div ng-controller="ctrl2">
      <span>ctrl2:</span>
      {{foo}}
    </div>
  </div>

但是,子级不会更新父级-只有父级的属性会更新子级。

您将使用“点规则”使子项上的更新影响父项。这意味着将您的属性嵌套在一个对象中。由于父级和子级都具有相同的对象,因此该对象上的更改将反映在两个地方。这就是对象引用的工作方式。许多人认为最好的做法是不使用继承,而是将所有内容放入具有孤立范围的指令中。



 类似资料:
  • 无论 Struts2 还是 Spring,都提供了一种控制器: 每次请求,创建实例,使用后即抛弃。 这样的控制器的好处就是可以放心的吧 request 和 response 对象放心的存成它的私有 属性,反正使用一次后就丢掉了。 在 Nutz.Mvc,所谓控制器,实际上就是 Module,默认的,所有的模块都是整个应用程序唯一的, 除非你在 Ioc 配置文件里另有说明。 那么 Nutz 可以做到每

  • 问题内容: 假设我有一个要注入到config中的模块: 有两个子模块: 这是第一个: 第二个是相同的,以简化示例: 您会注意到,您可以将它们作为提供者来访问以配置选项: 如果我们在控制器中,则可以覆盖每个范围,例如: 但是,如果他们总是共享相同的财产怎么办?如何在提供商之间共享某些东西? 我可以同时为和注入和配置共享属性吗? 如何同时访问和作为单个模块的扩展? 问题答案: 将模块插入两个共享这些属

  • 问题内容: 在Angularjs中,是否有特定的原因要在控制器中使用,并且要在指令链接函数中使用(不使用)?这仅仅是公约还是其他? 问题答案: 该情况下,当你在控制器的依赖注入范围内喷射基于匹配变量名使用,在这种情况下,因为名字是行不通的。 对于指令的情况下,注塑基于位置,所以你可以命名你的变量或或任何东西。链接功能的指令顺序为 因此,第一个元素始终是作用域对象。

  • 本章内容来自openresty讨论组 这里 先看两段代码: -- index.lua local uri_args = ngx.req.get_uri_args() local mo = require('mo') mo.args = uri_args -- mo.lua local showJs = function(callback, data) local cjson = requ

  • 问题内容: 如果我有以下控制器: 读出的正确方法是什么?如果有必要定义中,也不会使它语义上不正确假设是描述相关的东西的属性,而不是? 更新: 对此进行进一步的思考,如果一个孩子有多个孩子,将会在检索上产生冲突。我的问题是,什么是访问的正确方法是从? 问题答案: AngularJS中的作用域使用原型继承,当在子作用域中查找属性时,解释器将从子对象开始查找原型链,并继续寻找父对象,直到找到该属性为止,

  • 问题内容: 这将编译 这不会 我希望两者都能编译(也许这是C的工作方式?)。是什么原因导致无法在外部块中以相同的名称声明一个块中的变量? 问题答案: 简短的答案是:因为这是JLS§6.4中定义Java语言的方式。 您可能从其他语言中使用过,因此允许使用所谓的可变阴影。但是,Java语言的发明者认为这是一个笨拙的功能,他们不希望使用其语言: 此限制有助于检测其他一些非常模糊的错误。 但是,正如作者在