2017-02-09 63 views
0

新angularJS,閱讀Reference about Scope是否可以在ng模型中綁定一個全局變量?

如果所有控制器共享$rootScopeng-app後,才能分享其分配給$rootScope,使控制器可以相互通信的NG-模式?

測試與下面的代碼段,但gName失敗時modelinputController改改,假設可能是gName再次取得$scope.gName當輸入改變。如果這是真的,有沒有辦法與控制器相互溝通?即輸入可以顯示在其他控制器中?

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

 
app.controller("inputController", ["$rootScope", "$scope", function($rootScope, $scope){ 
 
      $rootScope.gName = "Hello"; 
 
    }]) 
 
    .controller("displayController1", ["$rootScope", "$scope", function($rootScope, $scope){ 
 
    }]) 
 
    .controller("displayController2", ["$rootScope", "$scope", function($rootScope, $scope){ 
 
    }]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp"> 
 
     <hr/> 
 
     <div ng-controller="inputController"> 
 
      <input type="text" ng-model="gName"/> <br/> 
 
      <span>{{gName}}</span> 
 
     </div> 
 
     <hr/> 
 
     <div ng-controller="displayController1"> 
 
      <span>{{gName}}</span> 
 
     </div> 
 
     <hr/> 
 
     <div ng-controller="displayController2"> 
 
      <span>{{gName}}</span> 
 
     </div> 
 
</body>

+1

您可以使用'services'在'controllers'之間共享數據 –

回答

1

在AngularJS的教程之後,$範圍從其父範圍繼承(並最終將是rootScope)

在角,原始當孩子改變他們時,類型被覆蓋。所以在輸入切換時gName它是保持$rootScope.gName並創建一個新的本地$scope.gName即只表明控制器

來解決,你可以添加對象的問題,並在它更改屬性

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

 
app.controller("inputController", ["$rootScope", "$scope", function($rootScope, $scope){ 
 
      $rootScope.prop = { gName: "Hello" }; 
 
    }]) 
 
    .controller("displayController1", ["$rootScope", "$scope", function($rootScope, $scope){ 
 
    }]) 
 
    .controller("displayController2", ["$rootScope", "$scope", function($rootScope, $scope){ 
 
    }]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp"> 
 
     <hr/> 
 
     <div ng-controller="inputController"> 
 
      <input type="text" ng-model="prop.gName"/> <br/> 
 
      <span>{{prop.gName}}</span> 
 
     </div> 
 
     <hr/> 
 
     <div ng-controller="displayController1"> 
 
      <span>{{prop.gName}}</span> 
 
     </div> 
 
     <hr/> 
 
     <div ng-controller="displayController2"> 
 
      <span>{{prop.gName}}</span> 
 
     </div> 
 
</body>

注意,我只回答這個問題,不建議做控制器,每個人,你應該使用該服務進行通信這種方式,您可以檢查此guide

+0

感謝您解釋@Nadeem Khedr – armnotstrong

1

你不希望你的控制器相互通信,作爲控制器的唯一目的是從和視圖變換數據和處理查看本地邏輯(如用複選框隱藏東西,預覽計算的數字等等)。

您的實際數據和業務邏輯應該在服務中,這也允許多個控制器訪問它。

1

在您的應用程序和應用程序controllersservices中共享邏輯/數據。最大的好處是digest cycle不受變化的影響,並且您的邏輯/數據可以輕鬆地以結構化/分離的方式在您的應用程序中共享。服務的使用可減少對可讀性的污染。

我嘗試僅使用$rootScope進行事件廣播/偵聽和主應用程序框架上的數據附件(例如應用程序外框中的數據)。

AngularJS服務宗旨是:

  • 懶洋洋地實例化 - AngularJS只有當應用程序組件依賴於它實例化的服務。

  • 單身人士 - 依賴於服務的每個組件獲取對由服務工廠生成的單個實例的引用。

一個詳細的例子可以通過在https://thinkster.io/a-better-way-to-learn-angularjs/services

相關問題