Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用$emit将数据从控制器传递到指令_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用$emit将数据从控制器传递到指令

Javascript 如何使用$emit将数据从控制器传递到指令,javascript,angularjs,Javascript,Angularjs,我努力将值从控制器传递到指令 $rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople}); $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg}); 我的控制器中有两个阵列 $scope.displayPeople.push(data.userName); $scope.displayOrg.push(data.orgname)

我努力将值从控制器传递到指令

$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
我的控制器中有两个阵列

$scope.displayPeople.push(data.userName);
$scope.displayOrg.push(data.orgname);
$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
我需要将这些数据从控制器传递到指令

<div>

    <div class="multitext-wrap blue-border">

        <ul inputfocus>

<!--<li class="tag" ng-repeat="list in selecteditemsdisplay  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,searchid)">x</span>-->
            <!--</li>-->

            <li class="tag" ng-repeat="list in displayItems  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,searchid)">x</span>
            </li>

            <li class="">
                <input type="text" ng-model="searchModel" ng-keydown="selected=false" ng-keyup="searchItem(searchModel,searchobj)"/>


            </li>

        </ul>
    </div>

<div class="typeahead"  ng-hide="!searchModel.length || selected">
    <div class="typeahead" ng-repeat="item in searchData | filter:searchModel | limitTo:8" ng-click="handleSelection(item,searchobj,$index,searchid)" style="cursor:pointer" ng-class="{active:isCurrent($index)}" ng-mouseenter="setCurrent($index)">
      <div class="bs-example">
    <div class="list-group list-group-item active">

            {{item.displayConfig[0].propertyValue}} {{item.displayConfig[1].propertyValue}}


    </div>
</div>


                    </div>
                </div>

</div>
$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
$rootScope.$on('displayEvent', function (event, args) {

                $scope.displayOrgs = args.displayItems;
                console.clear();
                console.info($scope.displayOrgs);
            });
我的指令

<div>

    <div class="multitext-wrap blue-border">

        <ul inputfocus>

<!--<li class="tag" ng-repeat="list in selecteditemsdisplay  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,searchid)">x</span>-->
            <!--</li>-->

            <li class="tag" ng-repeat="list in displayItems  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,searchid)">x</span>
            </li>

            <li class="">
                <input type="text" ng-model="searchModel" ng-keydown="selected=false" ng-keyup="searchItem(searchModel,searchobj)"/>


            </li>

        </ul>
    </div>

<div class="typeahead"  ng-hide="!searchModel.length || selected">
    <div class="typeahead" ng-repeat="item in searchData | filter:searchModel | limitTo:8" ng-click="handleSelection(item,searchobj,$index,searchid)" style="cursor:pointer" ng-class="{active:isCurrent($index)}" ng-mouseenter="setCurrent($index)">
      <div class="bs-example">
    <div class="list-group list-group-item active">

            {{item.displayConfig[0].propertyValue}} {{item.displayConfig[1].propertyValue}}


    </div>
</div>


                    </div>
                </div>

</div>
$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
$rootScope.$on('displayEvent', function (event, args) {

                $scope.displayOrgs = args.displayItems;
                console.clear();
                console.info($scope.displayOrgs);
            });
指导

<div>

    <div class="multitext-wrap blue-border">

        <ul inputfocus>

<!--<li class="tag" ng-repeat="list in selecteditemsdisplay  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,searchid)">x</span>-->
            <!--</li>-->

            <li class="tag" ng-repeat="list in displayItems  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,searchid)">x</span>
            </li>

            <li class="">
                <input type="text" ng-model="searchModel" ng-keydown="selected=false" ng-keyup="searchItem(searchModel,searchobj)"/>


            </li>

        </ul>
    </div>

<div class="typeahead"  ng-hide="!searchModel.length || selected">
    <div class="typeahead" ng-repeat="item in searchData | filter:searchModel | limitTo:8" ng-click="handleSelection(item,searchobj,$index,searchid)" style="cursor:pointer" ng-class="{active:isCurrent($index)}" ng-mouseenter="setCurrent($index)">
      <div class="bs-example">
    <div class="list-group list-group-item active">

            {{item.displayConfig[0].propertyValue}} {{item.displayConfig[1].propertyValue}}


    </div>
</div>


                    </div>
                </div>

</div>
$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
$rootScope.$on('displayEvent', function (event, args) {

                $scope.displayOrgs = args.displayItems;
                console.clear();
                console.info($scope.displayOrgs);
            });
通过这样做,我得到了重复的组织(无论是人还是组织都来了)

$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});

如何解决此问题请通过声明“scope:false”提前向我表示感谢。您可以在指令中访问控制器的作用域false表示“不创建隔离作用域,继承控制器”

$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
.directive('myDirective', function() {
  return {
    scope: false,
    link: function($scope){
        //Do stuff with $scope.displayOrgs
        //Do stuff with $scope.displayPeople
    }
  };
});
此选项将创建一个隔离范围并继承选定的变量。这是一种更干净的方法

$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
 .directive('myDirective', function() {
      return {
        scope:{
           displayPeople:'=',
           displayOrg :'=',
        },
        link: function($scope){
            //Do stuff with $scope.displayOrgs
            //Do stuff with $scope.displayPeople
        }
      };
 });

在控制器和指令之间使用$emit进行通信不是一个可取的方法。

您需要使用指令的“=”范围来允许控制器和指令之间的双向通信,如:

指令

$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});

与控制器相关的模板

$rootScope.$emit("displayEvent", {displayItems: $scope.displayPeople});


 $rootScope.$emit("displayEvent", {displayItems: $scope.displayOrg});
<yourDirectiveName displayPeople="displayPeople" displayOrg ="displayOrg "></yourDirectiveName >

$emit在这种情况下不需要,请使用rilar的答案