私はAngularJSの新人です。 AngularJSディレクティブのテンプレートを使用して画像を表示しようとしています。画像をクリックすると、画像にマーカーを配置できます。なぜ機能しないのかわかりません。
最初のディレクティブ:
directive('hello', function() {
return {
template: '<img id="map" src="http://www.lonelyplanet.com/maps/asia/india/map_of_india.jpg" />',
link: function(scope, element, attrs) {
$('#map').click(
function(e) {
$('#marker').css('left', e.pageX).css('top', e.pageY).show();
}
);
},
};
});
HTMLコード
<hello>
<img id="marker" src="http://maps.google.com/mapfiles/ms/micons/blue.png" style="display: none; position: absolute;" />
</hello>
restrict : 'E'
オプションがありません。デフォルトではrestrict
の値はAC
で、これは属性とクラスです。この場合、ディレクティブを要素として使用します。
更新:コメントに基づく
angular.module('test', []).directive('hello', function() {
return {
restrict : 'E',
template : '<div style="position: relative"><img id="map" src="http://www.lonelyplanet.com/maps/asia/india/map_of_india.jpg" /><img id="marker" src="http://maps.google.com/mapfiles/ms/micons/blue.png" style="display: none; position: absolute;" /></div>',
replace: true,
link : function(scope, element, attrs) {
$('#map').click(function(e) {
$('#marker').css('left', e.pageX).css('top', e.pageY)
.show();
});
}
};
});
デモ: フィドル
その他の考えられる問題:
widgetForm
で、restrict
が'E'
または'A'
の場合、<widget-form/>
ではなく<widgetForm/>
を使用する必要があります。デフォルトでは、angularjsでディレクティブを作成します。制限プロパティを無視する場合、angularjsはそれを属性と見なします。あなたのhtmlが示すように、あなたは返すオブジェクトを以下のように書くべきです
<body ng-app="myApp">
<hello>
<div id="marker"></div>
</hello>
</body>
angularでは、jqueryを追加しない場合でも、要素は既にjQueryオブジェクトです。独自の実装呼び出しjQLiteを使用するため、
var app = angular.module('myApp', []);
app.directive('hello',function(){
var linkFn = function (scope,element,attrs){
element.bind('click',function(e){
$('#marker').css('left', e.pageX).css('top', e.pageY).show();
});
};
return {
restrict : "E",
link: linkFn,
transclude:true,
template:'<div ng-transclude><img id="map" src="http://www.lonelyplanet.com/maps/asia/india/map_of_india.jpg" /></div>'
};
});
それが役に立てば幸い working exmaple
@Arunの言ったことは正しい。ただし、必須ではありません。デフォルトでは、urディレクティブが属性になります。
したがって、urディレクティブを要素として使用する代わりに
<hello>
<img id="marker" src="http://maps.google.com/mapfiles/ms/micons/blue.png"style="display: none; position: absolute;" />
</hello>
このように、属性として試してください
<img id="marker" src="http://maps.google.com/mapfiles/ms/micons/blue.png" style="display: none; position: absolute;" hello />
最初の文字列引数に「ディレクティブ」を追加しないでください。
.directive("someDirective", someDirective)
私にとってこれであるはずです:
.directive("some", someDirective)
使用したい場合は、少なくともそうでなければなりません。
<some>stuff</some>
コピーと貼り付けのエラーを見つけることは恐ろしいことです。 1つを見つける必要があるのも... :(