首页 > 解决方案 > AngularJS如何重新初始化指令?

问题描述

我在 AngularJS 中有一个指令,它在加载它的父控制器时默认首先初始化。

该指令使用 AJAX 从远程服务器获取数据并在复选框中实现数据 - 每个复选框都会获得线索,如果它已经被选中。

在第一次加载此页面(控制器)和指令时,复选框被正确检查。

当我移动到另一个范围(控制器)然后再回到复选框范围时,它们都没有被选中。即使使用 AJAX 从远程服务器再次请求数据(我在控制台记录了它),这些复选框也不会被选中。

我应该重新初始化指令吗?

这是指令(注意选中的属性):

<checkbox key="{{num}}" selector="{{category.key}}/{{module.key}}" changefunction="togglePermission"
              checked="{{permissions[num] && permissions[num].modules.indexOf(category.key+'/'+module.key)!=-1}}"></checkbox>

这是复选框指令 html 文件:

<div class="form-group" ng-class="{'has-danger': errors[selector].length>0}">
  <label class="control control-outline control--checkbox {{selector}}">
    <div class="input-group">
      <span ng-show="title.length>0">{{title}}</span>
      <input type="checkbox"
      ng-model="this[key][selector]"
      ng-disabled="loading"
      ng-click="this[changefunction](key, selector)"
      ng-checked="checked"
      />
      <span class="control__indicator"></span>
    </div>
  </label>
  <small class="text-danger" ng-show="errors[selector].length>0">{{errors[selector]}}</small>
</div>

快速解释:我正在发送自定义键和选择器名称,例如:

$scope.teams = {
  level: ""
}

所以teams将是关键,而level将是选择器

这是复选框组件js文件:

app.directive("checkbox", ($rootScope, parseService) => {
  return {
    templateUrl: "/shared/checkbox/checkbox.html",
    scope: true,
    link: function($scope, element, attrs) {

       $scope.key = parseService.parse(attrs.key);
       $scope.selector = parseService.parse(attrs.selector);
       $scope.changefunction = parseService.parse(attrs.changefunction);
       $scope.checked = parseService.parse(attrs.checked);

    }
  }
});

标签: javascriptangularjsdirective

解决方案


推荐阅读