現在在角碼的子功能compileNodes功能,有這些行:AngularJS不能未定義錯誤的讀取屬性「的childNodes」
} else if (childLinkFn) {
childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn);
}
在我的自定義選項卡的指令,我得到錯誤:無法讀取的未定義的屬性「的childNodes」:試圖手工編譯的模板指令(以動態添加點擊功能選項卡)使用此代碼時:
nucleusAngular.directive('nagTabs', ['$timeout', '$http', '$compile', 'nagDefaults', function($timeout, $http, $compile, nagDefaults){
return {
restrict: 'A',
scope: {
options: '=nagTabs'
},
compile: function() {
return {
pre: function(scope, element, attributes) {
var template = $('<div />').append($(element).html());
scope.options = nagDefaults.getTabsOptions(scope.options);
template.find('.tabs .tab').each(function(key, value) {
template.find('.tabs .tab:nth-child(' + (key + 1) + ')').attr('ng-click', 'switchTab(\'' + $(this).data('tab') + '\')');
});
element.html($compile(template)(scope));
$(element).addClass('nag-tabs');
},
post: function(scope, element, attributes) {
var $element = $(element);
scope.switchTab = function(tab) {
if(angular.isNumber(tab)) {
//todo: this should work
//tab = $(element).find('.tabs li:nth-child(' + tab + ')').data('tab');
tab = $(element).find('.tabs .tab:nth-child(' + (tab + 1) + ')').data('tab');
}
$(element).find('.tabs .tab').removeClass('active');
$(element).find('.tabs .tab[data-tab="' + tab + '"]').addClass('active');
$(element).find('.tab-content-item').removeClass('active');
$(element).find('.tab-content-item[data-tab="' + tab + '"]').addClass('active');
}
//load the default tab
$timeout(function(){scope.switchTab(scope.options.defaultTab);}, 0);
}
};
}
}
}]);
HTML:
<div nag-tabs="tabsOptions">
<ul class="tabs">
<li data-tab="html" ng-click="switchTab('html')">HTML</li>
<li data-tab="javascript" ng-click="switchTab('javascript')">JavaScript</li>
</ul>
<div class="tab-content">
<div data-tab="html" class="tab-content-item">
html...
</div>
<div data-tab="javascript" class="tab-content-item">
javascript...
</div>
</div>
</div>
現在也許我沒有正確地編譯模板,但是我已經嘗試了我能想到的編譯模板的每一種方法,並且我得到了我提到的錯誤或功能不起作用。閱讀後,似乎這個錯誤可能會出現一個空的文本節點。因爲我想我可以在我的代碼想到的一切,我走進角度代碼和修改將三個線條,看起來像這樣(我只是修改了第一行):
} else if (childLinkFn && node) {
childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn);
}
這驗證節點確實存在看看它是否應該調用childLinkFn(雖然我不是100%確定這種改變的效果,但看起來如果節點不等於某些東西,則不應該執行childLinkFn)。有了這個代碼,我的標籤代碼完美地工作(我沒有注意到其他指令中有任何其他問題)。然後,我克隆了angular.js存儲庫,並應用此更改,構建了角度,然後執行單元測試並結束2個最終測試,並且它們全部通過。
我的問題是我做錯了我如何編譯標籤的模板,我應該提交這個代碼更改爲拉請求(注意我正在1.1.3版本)?
IE或Chrome或所有的錯誤發生? 此外,標籤的外觀如何。您需要發佈適用的完整代碼或發佈JSFiddle。 – Ketan
添加了所需的代碼,並且錯誤發生在所有瀏覽器中,而我沒有更改角碼,並且它在所有瀏覽器中都正常工作,我在角碼 – ryanzec
中的更改更有意義,只需在'pre'中添加處理程序並進行操作在'後'。嘗試將html字符串傳遞給'$ compile'。創建一個實時演示 – charlietfl