2016-04-28 24 views
0

lesen Wenn ich Tooltips ich versuche zu verwenden angularstrap es verursachen diese Fehler jedes Mal das Projekt laden:angularstrap bs-Tooltip Ursache Fehler: Kann nicht Eigentum ‚toLowerCase‘ undefinierter

<span data-title="{{item.id}}" bs-tooltip delay="500"> </span> 

ein Fehler in der Konsole auftreten:

widgets.js:40761 TypeError: Cannot read property 'toLowerCase' of undefined 
at TooltipFactory (http://localhost:9000/grunt-scripts/widget.js:66317:43) 

Hat jemand Erfahrung damit, bitte helfen Sie mir?

"EDITED": Hier ist der Code der Winkel Tooltip:

angular.module('mgcrea.ngStrap.tooltip', ['mgcrea.ngStrap.helpers.dimensions']) 

    .provider('$tooltip', function() { 

    var defaults = this.defaults = { 
     animation: 'am-fade', 
     customClass: '', 
     prefixClass: 'tooltip', 
     prefixEvent: 'tooltip', 
     container: false, 
     target: false, 
     placement: 'top', 
     template: 'tooltip/tooltip.tpl.html', 
     contentTemplate: false, 
     trigger: 'hover focus', 
     keyboard: false, 
     html: false, 
     show: false, 
     title: '', 
     type: '', 
     delay: 0, 
     autoClose: false, 
     bsEnabled: true 
    }; 

    this.$get = ["$window", "$rootScope", "$compile", "$q", "$templateCache", "$http", "$animate", "$sce", "dimensions", "$$rAF", "$timeout", function($window, $rootScope, $compile, $q, $templateCache, $http, $animate, $sce, dimensions, $$rAF, $timeout) { 

     var trim = String.prototype.trim; 
     var isTouch = 'createTouch' in $window.document; 
     var htmlReplaceRegExp = /ng-bind="/ig; 
     var $body = angular.element($window.document); 

     function TooltipFactory(element, config) { 

     var $tooltip = {}; 

     // Common vars 
     var nodeName = element[0].nodeName.toLowerCase(); 
     var options = $tooltip.$options = angular.extend({}, defaults, config); 
     $tooltip.$promise = fetchTemplate(options.template); 
     var scope = $tooltip.$scope = options.scope && options.scope.$new() || $rootScope.$new(); 
     if(options.delay && angular.isString(options.delay)) { 
      var split = options.delay.split(',').map(parseFloat); 
      options.delay = split.length > 1 ? {show: split[0], hide: split[1]} : split[0]; 
     } 

     // store $id to identify the triggering element in events 
     // give priority to options.id, otherwise, try to use 
     // element id if defined 
     $tooltip.$id = options.id || element.attr('id') || ''; 

Das Problem in dieser Zeile:

var nodeName = element[0].nodeName.toLowerCase(); 
+0

Könnten Sie bitte Ihren JavaScript-Code-Snippet? Das wird uns helfen, Ihnen eine richtige Antwort zu geben. Ich vermute eine Korrektur dort –

+0

Ich habe es gerade in der Bearbeitungsfrage hinzugefügt. bitte guck dir das an. –

Antwort

0

Cannot read property 'toLowerCase' of undefined bedeutet, dass Sie versuchen, eine Methode zu laufen (String.prototype.toLowerCase()), das gehört zu ein String-Objekt für eine undefinierte Variable.

function TooltipFactory(element, config) { 

    var $tooltip = {}; 

    // Common vars 
    var nodeName = element[0].nodeName.toLowerCase(); 

dies ist der problematische Code, element[0].nodeName ist nicht definiert, was bedeutet element[0] haben keine Eigenschaft nodeName genannt. Sie können es testen Objekt das Element

console.debug("element[0] = %o", element[0]); 

durch Drucken, wenn element[0] das <span> Element ist, dass Sie nur den Tooltip Text über die title Eigenschaft zugreifen können

+0

Vielen Dank @svarog für die Erklärung, aber was ich will, ist Angurlarstrap Tooltip verwenden nicht den Titel von HTLM verwenden. Ich habe auch ein debugging dafür gemacht, bevor es das Fehlerprotokoll die Variable element = 'tooltip' anstelle von span warf. –