Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 angularjs selft$广播和$on_Javascript_Angularjs_Angularjs Directive_Ionic Framework - Fatal编程技术网

Javascript angularjs selft$广播和$on

Javascript angularjs selft$广播和$on,javascript,angularjs,angularjs-directive,ionic-framework,Javascript,Angularjs,Angularjs Directive,Ionic Framework,我已经创建了自定义指令,类似于下拉菜单,但在我的例子中,项目在模式弹出窗口中打开,选择后项目将在div中选择 现在我添加了两个指令(,即同一指令的两个实例),并使用这两个指令作为父子方式工作。我从rest api获取项目,然后分配给第一个指令(即父指令),并根据第一个指令的选择筛选另一个rest api,然后分配给第二个指令(即子指令),该指令工作得非常好。但每当更改第一个指令上的选择时,我想重置第二个指令的值(所选项) 我在指令中添加了以下代码,但对我没有帮助 controller: ['$s

我已经创建了自定义指令,类似于下拉菜单,但在我的例子中,项目在模式弹出窗口中打开,选择后项目将在div中选择

现在我添加了两个指令(,即同一指令的两个实例),并使用这两个指令作为父子方式工作。我从rest api获取项目,然后分配给第一个指令(即父指令),并根据第一个指令的选择筛选另一个rest api,然后分配给第二个指令(即子指令),该指令工作得非常好。但每当更改第一个指令上的选择时,我想重置第二个指令的值(所选项)

我在指令中添加了以下代码,但对我没有帮助

controller: ['$scope', '$rootScope',
        function($scope, $rootScope) {
          $scope.$watch('value', function(val) {
            $rootScope.$broadcast('valueChanged', $scope.id);
          });
          $scope.psChanged = function() {
            $scope.$on('valueChanged', function(event, value) {
              if (value === $scope.id) {
                //Do nothing.
              } else {
                console.log("Text change");
              }
            });
          }
        }
      ]
My full working plunker


有人能帮我完成吗

我在隔离作用域中添加了一个名为isChild的属性,当它为true时,我正在侦听event valueChanged。所以我甚至在控制器中绑定了监听器,而没有改变函数pschange,并且它可以工作

angular.module('plexusSelect', []).directive('plexusSelect', ['$ionicModal', '$timeout', '$ionicScrollDelegate', '$rootScope',
  function($ionicModal, $timeout, $ionicScrollDelegate, $rootScope) {
    // Runs during compile
    return {
      scope: {
        'items': '=',
        'id': '@',
        'text': '@',
        'textIcon': '@',
        'headerText': '@',
        'textField': '=',
        'valueField': '@',
        'callback': '&',
        'isChild' : '@'
      },
      require: 'ngModel',
      restrict: 'E',
      templateUrl: 'plexusSelect.html',
      controller: ['$scope', '$rootScope',
        function($scope, $rootScope) {
          $scope.$watch('value', function(val) {
            $rootScope.$broadcast('valueChanged', $scope.id);
          });
          if ($scope.isChild === 'true') {
          //$scope.psChanged = function() {
            $scope.$on('valueChanged', function(event, value) {
              if ($scope.id === value) {
                //Do nothing.
              } else {
                $scope.clearSearch();
                $scope.value = '';
                $scope.text = $scope.defaultText;
                console.log("Text change");
              }
            });

          }
        }
      ],
html


搜寻

我会用不同的方式来做。为要监视的指令再添加一个属性。(因此需要使用“=”,双向绑定)如果此观察属性的值已更改,请清除其自身的值。这样,您就不需要使用事件。毕竟,这只是一个一对一的通信,我不会为此使用event。事件侦听器回调中的if语句已经在执行'isChild'检查。代码的唯一问题是事件侦听器如何包装在
$pschange
中。不管怎样,这都是一个解决方案。非常感谢您的解决方案。它工作得很好。但我有一个问题,当我添加了另一个不是孩子也不是家长的指令时,我希望该指令单独起作用,但当我更改该指令的值时,我的孩子指令变为空白,我们缺少了什么吗。我想我们能把身份证给你吗?你说呢
<ion-view view-title="Search" ng-controller='SearchCtrl'>
    <ion-content>
    <h1>Search</h1>
  <plexus-select id="psDeparture"  is-child='false' items="deptStations" header-text="Select Departure Station" text="Select departure..." text-icon="icon-takeoff" text-field="['City_Name_EN','City_Code']" value-field="City_Code" ng-model="deptStation.value"></plexus-select>
    <plexus-select id="psArrival" is-child='true' items="arrStations" header-text="Select Arrival Station" text="Select arrival..." text-icon="icon-landing" text-field="['Destination.City_Name_EN','Destination.City_Code']" value-field="Destination.City_Code" ng-model="arrStation.value"></plexus-select>
    </ion-content>
</ion-view>