2016-09-16 131 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