我正在使用angularjs,我希望能夠在需要時加載指令,而不是在頁面開始時加載所有指令。我試圖爲我最常用的插件創建指令。如何在angularjs中加載指令?
這樣,一個direct可以在最終編譯html之前使用yepnope
加載所有需要的指令。
如果指令在頁面開始時與其他指令加載,則一切正常。但是,如果'孩子'指令稍後加載(在'父'內),它不會生效。以下是'parent'指令編譯字段中pre字段的代碼。
...
var pre = function (scope, element, attrs) {
element.html('Please wait. Loading...');
ang.loadDirectives('caiDatePicker', function() {
console.log('loaded');
scope.data.raw = scope.rawData;
var html = createObjUi(scope, scope.data, scope.defn);
element.html(html); //data
$compile(element.contents())(scope.$new());
scope.$apply();
});
};
return { restrict:'A', compile: {pre:pre,post:function(){...}};
ang.loadDirectives
使用yepnope加載指令。 「兒童」指令的部分代碼如下:
angular.module('mycomponents') //PS: I'm assuming this will fetch the already created module in the 'parent' directive
.directive('caiDatePicker', function ($parse) {
return {
scope: {},
restrict: 'A',
link: function (scope, element, attrs) {
scope.$watch('this.$parent.editing', function (v) {
scope.editing = v;
});
yepnope({
test: $().datePicker,
nope: [
'/content/plugins/datepicker/datepicker.js', //todo: use the loader
'/content/plugins/datepicker/datepicker.css'
],
complete: function() {
if (scope.model && scope.model.value) {
var date = scope.model.value;
element.val(date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear());
}
element.datepicker({ weekStart: 1, format: 'dd/mm/yyyy' })
.on('changeDate', function (ev) {
scope.model.value = ev.date;
scope.$apply();
});
}
});
attrs.$observe('path', function (v) {
var fn = $parse(v);
var model = fn(scope.$parent);
scope.model = model;
});
}
}
});
我是在做什麼,甚至可能在第一個地方?
如果是這樣,我做錯了什麼?
有趣的方法。但這意味着,多個引導程序。它會起作用嗎?另外,你能解釋一下你在ang.loadDirectives中做了什麼嗎? – Lior
解決您的yepnope問題,您可以按照此評論的第一個例子:https://github.com/SlexAxton/yepnope.js/issues/91#issuecomment-14526165 – heralight