2015-05-06 47 views
0

我正在考虑将数据从控制器传递到指令模板。我怎样才能做到这一点?如何从控制器到指令模板进行通信

这里是我的控制器:

$scope.$on('itemSelectedEvent', function (event, args) { 
    $scope.displayOrgs.push(data.orgName); 
}) 

而且指令:

directive('search', function ($timeout) { 
    return { 
     restrict: 'AEC', 
     scope: {  
      selecteditemslist: "=", 
      searchid: "@", 
      selecteditemsdisplay: "=", 
      searchobj: '@', 
      displayOrgs: '=displayOrgs'  
     }, 
     link: function (scope, elem, attrs, index, searchobj,searchid) { 
      scope.$emit('itemSelectedEvent', { 
       selectedId:scope.selectedId, 
       sortOrder:index, 
       searchId : searchid 
      } 
     ); 
    } 
}); 

displayOrgs应该传给指令。它是如何得到未定义的?

<li class="tag" ng-repeat="list in displayOrgs track by $index" ng-class="{selected: $index==selectedIndex}" > 
    <span class="tag-label">{{list}}</span> 
    <span class="tag-cross pointer" ng-click="Delete($index,selecteditemslist[$index],list,searchobj)">x</span> 
</li> 

请帮帮我。提前致谢。

+0

添加代码的指令 – eladcon

+0

而不是做'$ emit'为什么不直接写'scope.DisplayOrgs'直接,因为已经有一个数据由'scope'属性绑定有 –

+0

解决方案1:指令共享控制器的entiere范围// 解决方案2:指令有其自己的作用域(推荐),并检索所需的数据作为参数 – bviale

回答

1

无需生成事件scope.$emit来通知控制器变量已经更改。当你有超过变量控制两个分离其内部结合scope: { .. }

displayOrgs: '=displayOrgs'具有=意味着与指令 元素属性格关联变量双向绑定。

当你在你的指令使用displayOrgs: '=displayOrgs'(在隔离范围),在任何这是在隔离范围中提到的变量,会自动改变的变化所适用的被关联到范围变量的变化与display-orgs属性。

link: function (scope, elem, attrs) { 
    scope.displayOrgs.push(data.orgName); // this will update binding with parent scope. 
}); 
相关问题