javascript - 如何从 Controller 到指令模板进行通信

标签 javascript angularjs

我正在考虑将数据从我的 Controller 传递到指令模板。我怎样才能做到这一点?

这是我的 Controller :

$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>

请帮助我。提前致谢。

最佳答案

无需生成事件 scope.$emit 来通知 Controller 变量已更改。虽然您可以通过隔离范围内的两个绑定(bind)来控制变量:{ .. }

displayOrgs: '=displayOrgs' has = means two way binding with variable associated with directive element attribute div.

当您在指令中使用 displayOrgs: '=displayOrgs' (在隔离范围内)时,隔离范围内提到的任何变量的更改都会在将这些更改应用于与 display-orgs 属性关联的作用域变量。

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

关于javascript - 如何从 Controller 到指令模板进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077967/

相关文章:

Javascript - 在 div 中创建一系列 <a> 标签

javascript - 为什么在创建作用域时将参数传递给匿名函数

javascript - 用纯 JS 切换 div

javascript - ionic 登录(AngularJS)+本地存储问题

javascript - 让路由与 AngularJS 中的哈希一起工作

javascript - Jquery 淡出一一

javascript - 如果我突出显示文本,则取消 onclick 事件

Angularjs使用Facebook认证策略不拦截nodejs服务器提供的token

javascript - 将字符串赋予变量 Angular Javascript

javascript - 使用jquery动态添加ng-model到输入框属性