Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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/8/selenium/4.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
AngularJS指令';在父控制器之前/之后随机调用s控制器_Angularjs_Angularjs Directive - Fatal编程技术网

AngularJS指令';在父控制器之前/之后随机调用s控制器

AngularJS指令';在父控制器之前/之后随机调用s控制器,angularjs,angularjs-directive,Angularjs,Angularjs Directive,(角度版本:1.3.8) 我在指令的控制器“随机”中的调用中遇到异常。当在父控制器之前调用指令的控制器,并且指令控制器中使用的父控制器范围变量尚未初始化时,会发生异常。然而,在“随机”的情况下,我的父控制器确实在我的指令的控制器之前被调用,因此作用域变量被初始化,调用工作并且不会引发异常。我有两个问题(我有下面的示例代码): 为什么指令的控制器和父控制器之间的调用序列存在“随机性”?也就是说,为什么一个在另一个之前/之后被呼叫 我可以通过在HTML中稍作更改,并在HTML中的长度为1的数组上使用

(角度版本:1.3.8)

我在指令的控制器“随机”中的调用中遇到异常。当在父控制器之前调用指令的控制器,并且指令控制器中使用的父控制器范围变量尚未初始化时,会发生异常。然而,在“随机”的情况下,我的父控制器确实在我的指令的控制器之前被调用,因此作用域变量被初始化,调用工作并且不会引发异常。我有两个问题(我有下面的示例代码):

  • 为什么指令的控制器和父控制器之间的调用序列存在“随机性”?也就是说,为什么一个在另一个之前/之后被呼叫
  • 我可以通过在HTML中稍作更改,并在HTML中的长度为1的数组上使用ng repeat来消除随机序列,而不是将单个对象传递给我的指令。指令代码保持不变
  • 注意:父控制器有一个ajax调用注入服务(o_conversationService)。下面提到的$scope.thread变量依赖于从ajax调用返回的数据。也许,随机性的根源在于ajax回调时间,尽管我不清楚如何实现。无论如何,这并不能解释为什么HTML中的微小更改可以消除这个问题

    下面是两个HTML片段(第一个是随机工作的,第二个是可靠工作的),它们都使用相同的指令代码:

    HTML随机(非)工作场景:使用此HTML,在父控制器之前调用cfThread指令的控制器,并引发异常,因为“$scope.thread”为null(请参阅下面的指令控制器代码):

    • HTML代码段(指令名:“cf线程”):

      最后一点注意:在非工作HTML场景中,我始终可以向指令控制器中的“$scope.thread”添加$watch。不用说,尽管它是有效的,但我希望在没有必要的情况下避免它,正如在HTML工作场景中看到的那样


      我感谢你的想法和耐心

      您是否尝试设置优先级?没有设置优先级。请注意,如前所述,这只需稍加修改即可,这就引出了我所问的问题。好的,然后设置优先级,使您的指令在父控制器之后呈现和调用
      <cf-thread thread = "o_conversationService.o_thread"></cf-thread> 
      
      <cf-thread ng-repeat="threadObject in o_conversationService.o_threadCollection.objectDict" thread="threadObject"></cf-thread>
      
          threadDirectiveModule.directive('cfThread', ['$sce', function ($sce) {
      
          return {
              restrict: 'AEC',
              scope: { 
                  thread: '=' 
              },
      
              templateUrl: 'partials/directives/thread.html',
              controller: function ($scope) {
      
                  //EXCEPTION!!! $scope.thread is null if parent controller
                  //wasn't called first.
                  var unsafeDirectLink = cf.Utilities.createExternalDirectLink($scope.thread.dataJSON.source.type, 
                                                        $scope.thread.dataJSON.source.user_id,
                                                        $scope.thread.dataJSON.source.root_id)
      
                  if (cf.Utilities.isDefined(unsafeDirectLink)) {
      
                      $scope.thread.safeDirectLink = $sce.trustAsHtml(unsafeDirectLink);
                  }
                  else {
                      $scope.thread.safeDirectLink = null;
                  }       
              }
            };
          }]);