2015-09-23 114 views
0

共享我有以下的HTML

<section class="result" ng-repeat="record in results | orderBy: sortRecordByTimestamp" ng-init="highlights(record)" ng-class="level"> 
      <!-- some stuff --> 
</section> 

我的範圍有$scope.level = ''上初始化。功能:

function highlights(record) { 

    // will contain more logic 
    console.log('Highlighting...'); 
    level(record); 

} 

function level(record) { 

    $scope.spreadsheet.forEach(function(row) { 
    if (row.Name.indexOf(record.event) > -1) { 
     $scope.level = 'level' + row.Level; 
    } 
    }); 

} 

它正確地設置$scope.level像它應該,但是,它在我所有的成果共享。

是不是ng-repeat創建子範圍,原語被覆蓋?

編輯:

改變了HTML:

<section class="result" ng-repeat="record in results | orderBy: sortRecordByTimestamp" ng-class="level(record)"> 
    <!-- code --> 
</section> 

和JS:

$scope.level = function(record) { 

    $scope.spreadsheet.forEach(function(row) { 
    if (row.Name.indexOf(record.event) > -1) { 
     console.log('Highlighting: level' + row.Level); 
     return 'level' + row.Level; 
    } 
    }); 

} 

據登錄正確的價值觀,但是,NG-類是從未設置。爲什麼?

編輯2:

爲了澄清什麼,我試圖做的:

$scope.spreadsheet包含的數據來比較record數據。匹配可以在3個實例中找到,每個實例都在row.Level中列舉,具體取決於row.Name。所以level(record)返回一個css類級別1,級別2級別3

這些有一個background: /* color */屬性設置給他們。因此,在row.Name中找到的每行record.event(它們不完全匹配,這就是爲什麼沒有===)根據給定的重要程度進行着色。

我第一次試圖讓孩子作用域繼承$scope.level財產,並確定它的元素創建(這就是爲什麼ng-init),然後我做了$scope.level返回水平的功能。但是,它會在所有記錄上觸發最後一次迭代的結果。

我該如何確定每個記錄的單獨級別?

+0

這不是真的使用'ng-init'的正確方法。 'ng-init'的目的是爲'$ first','$ last','$ index'等特殊的'ng-repeat'屬性創建一個**別名**。*不是* for建立變量或運行一個函數。 https://docs.angularjs.org/api/ng/directive/ngInit – Claies

+0

我知道,我試圖想出一個不同的解決方案,這個問題之前...檢查編輯,似乎整潔,但是,不起作用 – Idefixx

+0

你究竟想要完成什麼?通過更全面地瞭解您的問題,幫助您找到可行的解決方案會容易得多。什麼是'級別'CSS類,你期待什麼結果? – Claies

回答

-1

您可以創建一個通用控制器並在該控制器中定義一個作用域變量,然後您可以將通用控制器引用到您希望獲取此變量的控制器文件中。

2

ng-repeat不會創建一個獨立的作用域,它確實會創建一個從其父作用域原型繼承的子作用域。如果你看看ng-repeat API,你會發現ng-repeat指令中有scope: true,它負責創建原型繼承範圍。

要訪問子作用域內父作用域的屬性,應該聲明object類型,以便按照點規則可以訪問其子屬性。如果您使用的是primitive類型,則應該提及$parent.以獲取對父範圍變量的訪問權限。

有各種由ng-repeat API提供的方法來跟蹤上你是哪個元素,$index在其中index元素你在的地方。

$index數迭代器的重複元素(0偏移。 .length-1)

$first boolean如果迭代器中的重複元素首先出現,則爲true。

$middle boolean如果重複元素位於迭代器中的第一個和最後一個之間,則返回true,如果是 。

$last布爾值如果 重複元素在迭代器中是最後一個,則返回true。

$even布爾true if 迭代器位置$ index是偶數(否則爲false)。

$odd boolean如果迭代器位置$ index是奇數(否則爲false),則返回true。