AngularJS Modules/Scope Sharing

后端 未结 2 2236
北海茫月
北海茫月 2020-12-15 00:30

I recently started using AngularJS and the way I\'m building my apps now is like this:

MainController.js

var app = angular.module(\'app\', [\'SomeC         


        
相关标签:
2条回答
  • 2020-12-15 00:53

    You can use $rootScope, each Angular application has exactly one root scope.

    Reference

    app.controller('MainController', function ($scope, $rootScope) {
        $rootScope.data = 'App scope data';
    }
    
    0 讨论(0)
  • 2020-12-15 00:59

    You could use a service like this: Live demo here (click).

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

    Markup:

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

    Here's a nice article on sharing data with services.

    You can also nest controllers to have the parent controller's scope properties inherited by the child scope: 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>
    

    But, the child won't update the parent - only the parent's properties update the child.

    You would use "the dot rule" to have updates on the child affect the parent. That means nesting your properties in an object. Since the parent and child both have the same object, changes on that object will be reflected in both places. That's just how object references work. A lot of people consider it best practice to not use inheritance, but put everything in directives with isolated scope.

    0 讨论(0)
提交回复
热议问题