我最近开始使用AngularJS,现在构建应用的方式是这样的:
var app = angular.module('app', ['SomeController', 'MainController']); app.controller('MainController', function ($scope) { // do some stuff }
var SomeController= angular.module('SomeController', []); SomeController.controller('SomeController', function ($scope) { $scope.variable = "test"; // do some otherstuff }
Im遇到的问题是范围未在模块之间共享。例如,无法从 MainController 获得变量“ test”。
$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>
但是,子级不会更新父级-只有父级的属性会更新子级。
您将使用“点规则”使子项上的更新影响父项。这意味着将您的属性嵌套在一个对象中。由于父级和子级都具有相同的对象,因此该对象上的更改将反映在两个地方。这就是对象引用的工作方式。许多人认为最好的做法是不使用继承,而是将所有内容放入具有孤立范围的指令中。