2016-09-16 130 views
1

我創建了一個指令,我正在循環它。我遇到的問題是,由於某種原因,$ scope.name顯示從最後指令的名稱,即使我做了一個分離範圍角度指令共享範圍問題

angular.module("testApp") 
.controller("testingCtrl","$scope",function($scope)  { 
    infos =[ 
    { 
     name ="test1" 
    }, 
    { 
     name ="test2" 
    } 
    ] 
    $scope.init=function(name){ 
     $scope.name=name 
    } 
}) 
.controller("directiveCtrl",["$scope",function($scope){ 
     console.log("HEY",$scope.name); 
}]) 
.directive("testing",function(){ 
    return{ 
     restrict:"E", 
     controller:"directiveCtrl", 
     scope:{ 
     name:"=" 
     }, 
     template:"<h1>{{name}}</h1>" 
    } 
}) 
<div ng-app="testApp"> 
    <div ng-controller="testingCtrl"> 
     <div ng-repeat="info in infos" ng-init="init(info.name)"> 
     <testing name="name"></testing> 
     </div> 
    </div> 
</div> 

所以它的顯示

test2的

TEST2

,但我要的是

test1的

test2

謝謝你的時間。

+0

你爲什麼要創建一個對象來傳遞的名字嗎? – dwbartz

+0

嗨@dwbartz我想複製更短,更容易閱讀代碼的情況,因爲真正的一個更大,它不適合在這裏。 – luis

+0

擺脫ng-init和那個init函數。玩範圍很糟糕。 – gyc

回答

3

我不知道爲什麼你是有這些問題,而是試圖複製你的問題時,我有以下變化codepen,因爲我認爲你並沒有完全複製你的工作角代碼:

  • 設置ng-repeatinfo in infos(你不工作)
  • 通行證info.name的指令,而不是{name:info.name}

ŧ HESE變化就引起輸出

test1 
test2 

這裏是我的codepen:http://codepen.io/anon/pen/JRKyAK?editors=1010#0

編輯:
隨着您所做的編輯,你有一個不同的問題。

你看到test2重複,究其原因是因爲你在infos每個info調用你的ng-initinit(info.name),作爲初始化函數在每個角產生這些新的div一次調用。
問題在於,$scope.init覆蓋$scope.name每次ng-repeat生成一個新的信息股利。這就是導致你的最後一個元素總是被顯示的原因,因爲你的指令被傳遞$scope.name,它總是包含你最後一個元素的名字。

我建議不使用ng-init和傳遞,而作爲信息名稱屬性,直接到你的指令,像這樣:

<testing name="info.name"></testing> 
+0

對不起@Amaan M,我忘了添加其餘的,我只是編輯帖子 – luis