【发布时间】:2016-06-28 12:14:16
【问题描述】:
home.html
<videodata></videodata>
videoctrl.js
$rootScope.cameraRTSPUrl = obj.objUrl;
directive.js
directive - myApp.directive('videodata', function() {
return {
restrict: 'EA',
scope : true ,
link: function(scope, element, attrs) {
element.replaceWith('<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" '+
'codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab" '+
'id="vlc" events="True"> '+
'<embed id="123" type="application/x-google-vlc-plugin" version="VideoLAN.VLCPlugin.2" autoplay="yes" '+
'loop="no" width="800" height="600" target="'+scope.cameraRTSPUrl+'"> '+
'</object>');
}
};
});
上面的代码有效,呈现的 HTML 如下
<object events="True" id="vlc"
codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab"
classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921">
<embed width="800" height="600" target="rtsp://localhost/media/media.amp" loop="no" autoplay="yes"
version="VideoLAN.VLCPlugin.2" type="application/x-google-vlc-plugin" id="123">
</object>
- 代码适用于
element.replaceWith,但这是正确的吗 使用自定义指令替换 HTML 的方法? - 如何使用
transclude: true,属性来替换我的 HTML ?
附:我在link 函数中使用scope.cameraRTSPUrl 值。
【问题讨论】:
-
使用
replace : true并在返回对象中使用template : <your html>。这可能会有所帮助。对不起,但我没有得到你想要实现的目标。为了超越指令的内部html,您还需要在模板中设置transclude:true并使用ng-transclude指令。 docs.angularjs.org/api/ng/directive/ngTransclude -
反对者请解释。我能够达到预期的结果,但想知道最好的方法。
-
你能告诉我你想要达到什么结果吗?
标签: javascript angularjs angular-directive