AngularJs вызывают директиву scoped в себе с помощью ng-repeat, которая не принимает новую область видимости дочернего элемента - PullRequest
0 голосов
/ 14 июня 2019

Проблема в том, что я вызвал Directive1 в той же директиве1 с использованием ng-repeat, и директива11 имеет значение в области видимости, но при вызове вложенной той же директивы с новым значением кажется, что она принимает первое значение.

я пытался вызвать ту же директиву внутри ng-повторения директивы

в HTML у меня есть это:

<accordion close-others="true">
    <node function="functionCtrller(item)"
          ng-repeat="item in list"
          ng-model="item">
    </node>
</accordion>

в моем определении директивы у меня есть:

myApp.directive('node', function($compile) {
return {
    restrict : 'E',
    terminal : true,
    scope : {
      node : '=ngModel',            
      function: '&function'
    },
    link : function($scope, $element) {
      if (angular.isArray($scope.node.children) && $scope.node.children.length > 0) {    
        $element.append('<accordion close-others="true"><node function="function(item)" ng-repeat="item in node.children" ng-model="item"></node></accordion>');
      }else{
      //....
      }    
      $compile($element.contents())($scope);
    } //end_link_directive
}; //end_return_directive

ошибок нет, только новый вызов функции не берет новый элемент из ng-repeat

1 Ответ

0 голосов
/ 26 июня 2019

Проверьте эту ссылку, она отлично объясняет, как сделать то, что вы пытаетесь сделать: https://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-3-isolate-scope-and-function-parameters

Быстрый отказ:

<!-- Passing in the function with the outer item object passed -->
<node function="functionController(item)" ...> 

И затем внутри вы делаете:

<!-- Inner node passing the function which it was passed -->
<node function="function(item)" ...>

Но это просто вызов внешней функции без передачи соответствующей информации через функцию директивы scope.Вам нужно что-то вроде этого, где внутренняя директива знает, какие параметры должны быть переданы ей.

<!-- Please call the outer function using the parameter name item with my value item-->
<node function="function({item:item})" ... >

В примерах на странице оба используют преимущество не использования действительной переданной функции области, а внутренней функции.Например:

<node function="doFunction(item)" ...>

$scope.doFunction(item) { 
    $scope.function({item: item}); 
}
...