Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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/21.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指令时如何刷新树的内容?_Javascript_Angularjs - Fatal编程技术网

Javascript 使用Angularjs指令时如何刷新树的内容?

Javascript 使用Angularjs指令时如何刷新树的内容?,javascript,angularjs,Javascript,Angularjs,下面是在中使用Angularjs指令的树视图示例 守则的一部分: .directive('treeView', ['$compile', function($compile) { return { restrict: 'E', scope: { value: '=', key: '=', filter: '=', idx: '=' }, link: function(scope, element, attrs)

下面是在中使用Angularjs指令的树视图示例

守则的一部分:

.directive('treeView', ['$compile', function($compile) {
  return {
    restrict: 'E',
    scope: {
      value: '=',
      key: '=',
      filter: '=',
      idx: '='
    },
    link: function(scope, element, attrs) {
      var value = scope.value
      scope.curValue = scope.value;
      console.log(scope.curValue)

      var template =
        '<ul>' +
          '<li>{{key}}</li>' +
          '<li class="inner-node" ng-repeat="(k,v) in curValue">' +
            '<i class="collapsed" ng-show="haschildren(v)" ng-class="{\'list-plus\':!k' + "open" + '}" ng-click="k' + "open" + '=!k' + "open" + '"></i>' +
            '<span class="" ng-click="seeAll(k)">{{k}}</span>' +
          '</li>' +
        '</ul>';
      scope.haschildren = function(obj) {
        return !$.isEmptyObject(obj)
      };
      scope.seeAll = function(key) {};
      element.html('').append($compile(template)(scope));
    }
  };
}]);
.directive('treeView',['$compile',function($compile){
返回{
限制:'E',
范围:{
值:'=',
键:'=',
筛选器:'=',
idx:“=”
},
链接:函数(范围、元素、属性){
var值=scope.value
scope.curvlue=scope.value;
console.log(scope.curValue)
变量模板=
“
    ”+ “
  • {{key}
  • ”+ “
  • ”+ '' + “{{k}}”+ “
  • ”+ “
”; scope.haschildren=函数(obj){ return!$.isEmptyObject(obj) }; scope.seeAll=函数(键){}; html(“”).append($compile(template)(scope)); } }; }]);
我想通过单击开关按钮来更改树节点,该按钮将scope.fields设置为一个新值

但点击后,一切都没有改变。 我想这是因为我用了一个错误的方法链接,但我不知道什么是正确的方法


我该怎么办?

问题是,当指令第一次链接时,链接函数只执行一次

您应该使用指令的template属性来设置模板。之后,您可以将scope.haschilds和scope.seeAll方法放在指令的控制器中

检查更新的

.directive('treeView',['$compile',function($compile){
返回{
限制:'E',
范围:{
值:'=',
键:'=',
筛选器:'=',
idx:“=”
},
模板:“
    ”+ “
  • {{key}
  • ”+ “
  • ”+ '' + “{{k}}”+ “
  • ”+ “
”, 链接:函数(范围、元素、属性){ }, 控制器:功能($scope){ $scope.haschildren=函数(obj){ return!$.isEmptyObject(obj) }; $scope.seeAll=函数(键){}; } }; }]);
明白了!谢谢你@Eylen!
.directive('treeView', ['$compile', function($compile) {
  return {
    restrict: 'E',
    scope: {
      value: '=',
      key: '=',
      filter: '=',
      idx: '='
    },
    template: '<ul>' +
        '<li>{{key}}</li>' +
        '<li class="inner-node" ng-repeat="(k,v) in value">' +
        '<i class="collapsed" ng-show="haschildren(v)" ng-class="{\'list-plus\':!k' + "open" + '}" ng-click="k' + "open" + '=!k' + "open" + '"></i>' +
        '<span class="" ng-click="seeAll(k)">{{k}}</span>' +
        '</li>' +
        '</ul>',
    link: function(scope, element, attrs) {

    },
    controller: function($scope){
      $scope.haschildren = function(obj) {
        return !$.isEmptyObject(obj)
      };
      $scope.seeAll = function(key) {};

    }
  };
}]);