2017-01-08 50 views
0

http://www.w3schools.com/angular/tryit.asp?filename=try_ng_repeat_object訪問全局變量在角度範圍

代替

<div ng-app="" ng-init="names=[ 
    {name:'Jani',country:'Norway'}, 
    {name:'Hege',country:'Sweden'}, 
    {name:'Kai',country:'Denmark'}]"> 

是否有一個語法來指向一個外部變量以ng-INIT聲明別處(而不是在angularjs控制器聲明),因爲這一個不起作用:

<script> 
    var myNames = [ 
    {name:'Jani',country:'Norway'}, 
    {name:'Hege',country:'Sweden'}, 
    {name:'Kai',country:'Denmark'}] 
    </script> 

    <div ng-app="" ng-init="names=myNames"> 

我知道這是壞習慣,但我也使用另一個框架,也不想重複變量的內容。它只是用於原型而不是真正的應用程序代碼。

否則如果我使用ng-init初始聲明,我可以從另一個腳本變量引用它嗎?

+0

沒有,沒有,部分原因是該方式的角度範圍的工作,部分原因是因爲'NG-init'是指令(所以你傳遞一個表達式),部分原因是除了極其簡單的概念驗證之外,這不是你應該使用'ng-init'的東西。 – Claies

+0

該演示是w3schools的一個經典顯示,旨在宣傳違反角度文檔建議的不良做法 – charlietfl

回答

1

它不會因爲以下原因

  1. 腳本標記是在HTML文檔的javascript工作。它與angular的ng-init指令沒有任何關係。
  2. 關於ngInit指令的angular documentation警告如下所示。

List item

最佳做法是去與控制器當這些種情況出現。

更新按照討論中的聊天

<body> 
    <script> 
    var myNames = [ 
    {name:'Jani',country:'Norway'}, 
    {name:'Hege',country:'Sweden'}, 
    {name:'Kai',country:'Denmark'}]; 

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

    app.controller('myController',function($scope){ 

     $scope.names=window.myNames; 

    }); 
    </script> 
    <div ng-app="myApp" ng-controller="myController"> 
     <p>Looping with objects:</p> 
     <ul> 
      <li ng-repeat="x in names">{{ x.name + ', ' + x.country }}</li> 
     </ul> 
    </div> 
</body> 
+0

我知道這是不好的做法,但我也使用了另一個框架,並且不希望重複變量的內容。 – user310291

+0

您可以使用** window.myNames **來訪問該變量。否則在html文檔中,但你不能在** angular ng-init **中使用它。 – Aravind

+0

不確定明白:如果我使用ng-init初始聲明,我可以從另一個腳本變量引用它,或者我不能嗎? – user310291