0

I need to create a new function in angularjs so I did something like below. I need to disable some elements in angular tree control.

$scope.filterTreeOption = {
    dirSelectable: false,
    multiSelection: true,
    injectClasses: {
      "li": "injectedTreeLi"
    }
}

$scope.isFatalDisabled = false; $scope.isErrorDisabled = false; $scope.isWarnDisabled = false; $scope.isInfoDisabled = false; $scope.isDebugDisabled = false; $scope.isTomcatDisabled = false; $scope.isAgentDisabled = false; $scope.isSessionDisabled = false; $scope.isActivityDisabled = false;

// Another function here which changes above boolean property to true if needed.

var func = function(node) {
  var tmp = (node.label.indexOf("Fatal") !== 0 && $scope.isFatalDisabled) &&
  (node.label.indexOf("Error") !== 0 && $scope.isErrorDisabled) &&
  (node.label.indexOf("Warn") !== 0 && $scope.isWarnDisabled) &&
  (node.label.indexOf("Info") !== 0 && $scope.isInfoDisabled) &&
  (node.label.indexOf("Debug") !== 0 && $scope.isDebugDisabled) &&

  (node.label.indexOf("Tomcat") !== 0 && $scope.isTomcatDisabled) &&
  (node.label.indexOf("Agent") !== 0 && $scope.isAgentDisabled) &&
  (node.label.indexOf("Session") !== 0 && $scope.isSessionDisabled) &&
  (node.label.indexOf("Activity") !== 0 && $scope.isActivityDisabled);
  return tmp;
}

//and then I am trying to assign it to an already existing javascript object

$scope.filterTreeOption.isSelectable = func;

But this does not take effect. Is this correct way or I am missing something. Please help.

4
  • is not clear the use of node... Commented Apr 13, 2016 at 12:58
  • @thegio: node is the node object. Check here Commented Apr 13, 2016 at 13:59
  • seems fine to me, can you show us the HTML where you use that angular tree ? And use your browser's debogguer and add a breakpoint in your function to check if it is really called. Commented Apr 13, 2016 at 14:01
  • you should use the opt directive: $scope.opts = { isSelectable: function(node) { return node.label.indexOf("Node 1") !== 0; } }; <treecontrol class="tree-classic" tree-model="treedata" options="opts" on-selection="showSelected(node)"> label: {{node.label}} ({{node.id}}) </treecontrol> Commented Apr 13, 2016 at 14:06

1 Answer 1

1

The value that you should be checking against for indexOf is not 0, which is the first index of the string, but -1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

$scope.filterTreeOption = {
    dirSelectable: false,
    multiSelection: true,
    injectClasses: {
      "li": "injectedTreeLi"
    }
}

$scope.isFatalDisabled = false; $scope.isErrorDisabled = false; $scope.isWarnDisabled = false; $scope.isInfoDisabled = false; $scope.isDebugDisabled = false; $scope.isTomcatDisabled = false; $scope.isAgentDisabled = false; $scope.isSessionDisabled = false; $scope.isActivityDisabled = false;

// Another function here which changes above boolean property to true if needed.

var func = function(node) {
  var tmp = (node.label.indexOf("Fatal") !== -1 && $scope.isFatalDisabled) &&
  (node.label.indexOf("Error") !== -1 && $scope.isErrorDisabled) &&
  (node.label.indexOf("Warn") !== -1 && $scope.isWarnDisabled) &&
  (node.label.indexOf("Info") !== -1 && $scope.isInfoDisabled) &&
  (node.label.indexOf("Debug") !== -1 && $scope.isDebugDisabled) &&

  (node.label.indexOf("Tomcat") !== -1 && $scope.isTomcatDisabled) &&
  (node.label.indexOf("Agent") !== -1 && $scope.isAgentDisabled) &&
  (node.label.indexOf("Session") !== -1 && $scope.isSessionDisabled) &&
  (node.label.indexOf("Activity") !== -1 && $scope.isActivityDisabled);
  return tmp;
}

//and then I am trying to assign it to an already existing javascript object

$scope.filterTreeOption.isSelectable = func;
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.