Angular.js: ngSrc๊ฐ€ HTML5 ๋น„๋””์˜ค ์†Œ์Šค ํƒœ๊ทธ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2012๋…„ 09์›” 09์ผ  ยท  78์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/angular.js

firefox์—์„œ ๋น„๋””์˜ค ์š”์†Œ์— ๋Œ€ํ•œ ngSrc ์ง€์‹œ๋ฌธ 'ํƒœ๊ทธ๊ฐ€ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ง€์›๋˜์ง€ ์•Š๋Š” ๋™์˜์ƒ ํ˜•์‹ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กฌ์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ngSrc๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ํŽ˜์ด์ง€๋กœ๋“œ์‹œ์—๋งŒ ๋น„๋””์˜ค๋ฅผ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋””์˜ค๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰

<video controls>
     <source ng-src="{{src}}">
</video>

Firefox์—์„œ๋Š” ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ํฌ๋กฌ์—์„œ๋Š” ์ฒ˜์Œ๋กœ๋“œ ํ•  ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜,

<video ng-src="{{src}} controls></video>

๋‘ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ชจ๋‘ ์ž‘๋™ํ•˜๋ฉฐ ๋ฌธ์ œ์—†์ด ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋น„๋””์˜ค ํ˜•์‹์„ ๊ฐ€์งˆ ๋•Œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๊ด€๋ จ : # 339

misc core moderate investigation broken expected use bug

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์‚ฌ์šฉ์ž ์ง€์ • ์ง€์‹œ๋ฌธ์œผ๋กœ ์ˆ˜์ •

<source ng-repeat="source in sources" vsrc="{{ source.path }}" type="{{ source.type }}" html5vfix>


//Html5 video fix
eshop.directive('html5vfix', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attr) {
            attr.$set('src', attr.vsrc);
        }
    }
});

๋ชจ๋“  78 ๋Œ“๊ธ€

๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ Angulars ng-repeat์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ๋ฒ”์œ„์—์„œ ๋น„๋””์˜ค๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ œ๋Œ€๋กœ ์žฌ์ƒ๋˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปจํŠธ๋กค์ด๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋„.

๋‚˜๋„! ๋„์™€์ฃผ์„ธ์š”

+1

ng-repeat๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ng-src ์†Œ์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  ํŽ˜์ด์ง€๋กœ๋“œ์‹œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ๋กœ๋“œ๋˜์ง€๋งŒ ๋น„๋””์˜ค๊ฐ€ ng-show๋ฅผ ํ†ตํ•ด ์ˆจ๊ฒจ์กŒ๋‹ค๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋˜๋ฉด ์†Œ์Šค๊ฐ€ ๋‹ค์‹œ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (Chrome์—์„œ).

sourcec0de์˜ ๊ด€์ฐฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ng-repeat๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹จ์ผ ng-src ์†Œ์Šค (๋˜๋Š” ์—ฌ๋Ÿฌ ng-src ์†Œ์Šค)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋””์˜ค๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ ๋  ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค์‹œ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ng-src ์‚ฌ์šฉ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ng-repeat ์‚ฌ์šฉ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด Chrome์€ ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ•œ ํ›„ ํŽ˜์ด์ง€๋กœ ๋Œ์•„์˜จ ํ›„ HTML5 ๋™์˜์ƒ์„ ๋ฐ˜๋ณตํ•ด์„œ ๋‹ค์‹œ๋กœ๋“œํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊นจ๋—ํ•œ ์บ์‹œ์—์„œ 2 ๊ฐœ์˜ ์š”์ฒญ (์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์€ Pending ), ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์€ 206 Partial Content ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด 304 Not Modified ์š”์ฒญ์ด ํ•˜๋‚˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋น„๋””์˜ค๋ณด๊ธฐ์—์„œ ๋ฒ—์–ด๋‚˜ ๋‹ค์‹œ ๋Œ์•„ ์˜ค๋ฉด (๋งํฌ๋ฅผ ํ†ตํ•ด ๋˜๋Š” ๋’ค๋กœ ๋‹จ์ถ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) Pending ์ƒํƒœ์˜ ๋น„๋””์˜ค์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ์š”์ฒญ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋“ค ์ค‘ ํ•˜๋‚˜๋Š” MIME ์œ ํ˜• video/mp4 (์˜ฌ๋ฐ”๋ฅธ)์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Pending ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋„์ด ๋ฌธ์ œ๋ฅผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ ???

์ด ๋ฌธ์ œ์˜ ์‹คํ–‰ ์˜ˆ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?
๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง ํ›„ HTML5 ๋น„๋””์˜ค ์š”์†Œ์˜ src ์†์„ฑ ๋ณ€๊ฒฝ์„ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๊นŒ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์•ฑ์€ ์•„์ง ๊ฒŒ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
Safari์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ng-src ์ง€์‹œ๋ฌธ๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง„ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ src ์†์„ฑ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง์„  jQuery๋กœ src๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?
์ด๊ฒƒ์ด AngularJS๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฒ„๊ทธ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

2013 ๋…„ 7 ์›” 16 ์ผ 22:31์— Paul Grenier [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์•ฑ์€ ์•„์ง ๊ฒŒ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
Safari์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ng-src ์ง€์‹œ๋ฌธ๊ณผ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ src๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง„ ์†์„ฑ.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHub์—์„œ ํ™•์ธ ํ•˜์„ธ์š”.
.

src๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ (์˜ˆ : video src ์†์„ฑ์„ ํ•˜๋“œ ์ฝ”๋”ฉ) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Angular๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— Angular์—์„œ ๋ฌธ์ œ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. Chrome์˜ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

Angular๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋Š” Angular์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ๋‹ค๋ฅธ ๋ทฐ๋ฅผ๋กœ๋“œ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋’ค๋กœ ๋ฒ„ํŠผ์ด๋‚˜ ์ด์ „ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ „ ์ฝ˜ํ…์ธ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ๋น„๋””์˜ค๊ฐ€ ๋งค๋ฒˆ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Angular ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ Chrome์—๋งŒ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” Chrome์˜ ๊ณต๊ฒฉ์ ์ธ ์บ์‹ฑ๊ณผ Angular์˜ ๋ทฐ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์„๋กœ๋“œํ•ด์•ผํ•˜๋Š”์ง€ ๋™์˜ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@AutoSponge ๋‚ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
2 ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ„ํŠผ์ด์žˆ๋Š” 1 ํŽ˜์ด์ง€
videojs ํ”Œ๋ ˆ์ด์–ด์™€ 1 ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ฒ„ํŠผ์ด์žˆ๋Š” 2 ํŽ˜์ด์ง€

1 ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ•œ ๋‹ค์Œ 2 ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด ๋น„๋””์˜ค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ 1 ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ„ ๋‹ค์Œ 2 ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด Google ํฌ๋กฌ์ด videojs ์‚ฌ์šฉ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” angular๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ DOM์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ videojs ๊ฐ์ฒด๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ angularjs๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค (์˜ˆ!)

videojs ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์ „์— ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ง€์‹œ๋ฌธ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ง€์‹œ๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ :

... directive('mydir', ... {
    var vp;
    return {
        link: ..{ 
            if (vp) vp.dispose();
            vp = videojs("mp4video");
        }
    };`

OP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ž˜ํผ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์˜์ƒ์€ HTML5 ๋™์˜์ƒ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์Œ, videoJS๋Š” DOM์— ์ถ”๊ฐ€ ๋œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ถ”์ ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. DOM์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด (์˜ˆ : ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—) videoJS๋Š” ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 17 ํ–‰ ์ฐธ์กฐ : https://github.com/videojs/video.js/blob/master/src/js/core.js
videoJS ์™ธ๋ถ€์—์„œ ์ œ๊ฑฐํ•˜๋ฉด ํ”Œ๋ ˆ์ด์–ด์˜ dispose () ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. jquery ํ”Œ๋Ÿฌ๊ทธ์ธ (?)์„ ๋ž˜ํ•‘ ํ•  ๋•Œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ๊ฐ๋„ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
AV ํŒŒ์ผ์„ src ๋˜๋Š” ng-src๋กœ๋กœ๋“œํ•˜๋ฉด ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋ ค๋ฉด ์ง€์‹œ๋ฌธ์ด๋‚˜ ํŒฉํ† ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
http://stackoverflow.com/questions/15485768/changing-html5s-source-src-attribute-takes-no-effect-wtih-angularjs

๋‚˜๋„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Chrome, Firefox ๋ฐ Safari์—์„œ ๋™์˜์ƒ์ด๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ IE์—์„œ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ž‘์—…์˜ ์ฃผ์œ„๊ฐ€ : HTTP : //stackoverflow.com/questions/15728424/html5-video-is-not-working-with-angularjs-ng-src-tag

ํŽ˜์ด์ง€๋กœ๋“œ์‹œ ๊นœ๋นก ๊ฑฐ๋ฆผ์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

+1

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‚ด ๊ฒฝ์šฐ ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    $scope.play = function(who) {
        var name = who.id.split('.')[0];
        $scope.audio.mp3 = name + '.mp3';
        $scope.audio.ogg = name + '.ogg';
        $scope.audio.play = 'views/audio.html?'+name;
    };

๋‚ด ๊ฒฝ์šฐ์—๋Š” ํ…œํ”Œ๋ฆฟ์— ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

<div ng-include src="audio.play"></div>

views / audio.html์˜ ๋‚ด ํ…œํ”Œ๋ฆฟ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<audio ng-model="audio" controls autoplay >
    <source ng-src="{{audio.mp3}}" type='audio/mp3'></source>
    <source ng-src="{{audio.ogg}}" type='audio/ogg'></source>
</audio>

$ scope.audio.play๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ๋กœ๋“œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŒŒ์ผ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์ž„์˜์˜ ์ˆซ์ž ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@caitp ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์— ๋Œ€ํ•œ PR์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๋‚ด ๊ธฐ์–ต์ด ๋‚˜์—๊ฒŒ ์‹คํŒจํ•ฉ๋‹ˆ๊นŒ?

@IgorMinar ์ž‘์—…ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค (http://jsfiddle.net/J77gE/ ์ฐธ์กฐ). ๋” ๋งŽ์€ ๋ฐ”์ธ๋”ฉ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”์–ด ์™ธ๋ถ€์— ๋ฏธ๋””์–ด ๋„์šฐ๋ฏธ ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, ng-src๋Š” ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์™€ ์ตœ์‹  ๊ฐ๋„์˜ ์†Œ์Šค ํƒœ๊ทธ์— ๋Œ€ํ•ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๋ฌธ์ œ๋Š” ํŠนํžˆ ๋ทฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋’ค๋กœ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. jsfiddle์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋ ค๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์š”์ ์€ ์†Œ์Šค ํƒœ๊ทธ๋ฅผ ๋ณด๊ฐ„ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๋ฌธ์ œ๋ฅผ ์ „ํ˜€ ์žฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@AutoSponge ๋ฐ๋ชจ ์•ฑ๊ณผ์ด๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

http://jsfiddle.net/AutoSponge/Yh9en/

๋น„๋””์˜ค ๋งํฌ๋ฅผ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. ์ฒ˜์Œ์œผ๋กœ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ํ™ˆ์„ ํด๋ฆญ ํ•œ ๋‹ค์Œ ๋น„๋””์˜ค๋ฅผ ๋‹ค์‹œ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค. ํ•œ๋‘ ๋ฒˆ ํด๋ฆญํ•˜๋ฉด Chrome์—์„œ๋กœ๋“œ๊ฐ€ ์ค‘์ง€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(ํŒ๋‹จํ•˜์ง€ ๋งˆ์„ธ์š”, 8 ๊ฐœ์›” ์ „ ์•ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๊ฑธ ํ•จ๊ป˜ ๋˜์กŒ์Šต๋‹ˆ๋‹ค!)

@AutoSponge ์ด๊ฒƒ์€ Angular ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Chrome์˜ ์ด์ƒํ•œ ๋™์ž‘์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ์†Œ์Šค ํŒŒ์ผ์„ ๋ณด๊ฐ„ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ src๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์บ์‹ฑ์— ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ์•ˆํƒ€๊นŒ์šด ์ผ์ž…๋‹ˆ๋‹ค. (ngIf์—๋„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ngShow + ๋ณผ๋ฅจ์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

Chrome์˜ ์•ˆํƒ€๊นŒ์šด ๋ฌธ์ œ๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด์ด ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ์ž‘์—…์—†์ด 9 ๊ฐœ์›” ๋™์•ˆ ์—ด๋ ค์žˆ๋Š” ์ฃผ๋œ ์ด์œ ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Chrome์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ ๋ฌดํšจํ™” ์˜ต์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ถ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? src์— ์ž„์˜์˜ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Chrome์—์„œ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ Angular์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ pushState์™€ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์†”์งํžˆ ์ง€๊ธˆ ์ฏค์ด๋ฉด ํ•ด๊ฒฐ ๋  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŠน์ • ๋ฌธ์ œ๋Š” ์•„๋งˆ๋„ ํฌ๋กฌ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์— ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (HTMLMediaElement ์บ์‹œ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ์—ด๋ ค ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ๊ฑฐ๊ธฐ์—์„œ ์ด์•ผ๊ธฐ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค).

๊ธฐ์–ตํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ด๊ฒƒ์ด ์‚ฌ์–‘์— ์ •์˜ ๋œ ์˜ˆ์ƒ ๋™์ž‘ ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์–‘์—์„œ ์ด์ƒํ•œ / ๋ถˆํ–‰ํ•œ ๋™์ž‘์„ ์š”์ฒญํ•œ ๊ฒƒ์€ ์ฒ˜์Œ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ์™€ ๋ณ„๊ฐœ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ

๋‹ค์†Œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ด€๋ จ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ํฌ๋กฌ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ). :)
๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€
http://stackoverflow.com/questions/16137381/html5-video-element-request-stay-pending-forever-on-chrome

๋˜ ๋‹ค๋ฅธ ์ฐธ๊ณ ๋กœ HTML5 ์‚ฌ์–‘์€ํƒœ๊ทธ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์ง€๋งŒ src ์†์„ฑ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰ ํ›„ ๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œ์ผ“์ด ๊ฐ๋„๋ฅผ ์ด๋ฃจ์ง€ ์•Š๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํฌ๋กฌ๊ณผ ๊ฐ€์žฅ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ๋น„๋””์˜ค ํƒœ๊ทธ์— preload = "none"์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ปจํŠธ๋กค๋Ÿฌ์—์„œ

$scope.mp3 = "http://download.jw.org/audio.mp3"

$scope.$watch('mp3', function() {
       $("audio").attr("src",$scope.mp3)
   });

html :

<audio id="mejs" type="audio/mp3" controls="controls"></audio>

@agliottone ๊ท€ํ•˜๊ฐ€ ์ œ์•ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‚˜์œ ๊ด€ํ–‰์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ DOM์— ์“ฐ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ง€์‹œ๋ฌธ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

@btford 1 ๋™์˜ํ•˜์ง€๋งŒ ..
๊ทธ๋Š” ๋งˆ์ง€๋ง‰ ์•…์ธ์„ ๋ฐ”์ณค์Šต๋‹ˆ๋‹ค.

+1

์ƒˆ ์†Œ์Šค๊ฐ€ ์„ค์ • ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ ๋น„๋””์˜ค ์†Œ์Šค๊ฐ€ ํ‘œ์‹œ๋˜๋„๋กํ•˜๋ ค๋ฉด ๋„ค์ดํ‹ฐ๋ธŒ ๋น„๋””์˜ค ์š”์†Œ์—์„œ .load() ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์ €๋Š” HTML 5 ๋น„๋””์˜ค๊ฐ€ ์ฒ˜์Œ๋กœ๋“œ ๋  ๋•Œ ํŽ˜์ด์ง€๋ฅผ๋กœ๋“œ ํ•  ๋•Œ Google Chrome์—์„œ angularJS์— ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ng-view๋กœ๋ณด๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด๋กœ๋“œ๋˜์ง€ ์•Š์ง€๋งŒ Firefox์—์„œ๋Š” ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ๋ฌด์—‡์„ํ•ด์•ผํ•˜๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค!

์ด๋Š” <embed> ๋ฐ ngSrc ์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. # 339 ์ฐธ์กฐ

์ด๊ฒƒ์€ ๊ณ ์ณ์•ผ ํ•  neeeeeeds์ž…๋‹ˆ๋‹ค .ddddddd :(

๋‚˜๋Š” plnkr์„ ์ผ๋‹ค
๋™์˜์ƒ์„ ํด๋ฆญํ•˜๋ฉด ๋™์˜์ƒ์ด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋งํฌ๋ฅผ ํด๋ฆญ ํ•œ ๋‹ค์Œ ๋น„๋””์˜ค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋™์˜์ƒ์ด ๋ณด๋ฅ˜ ์ค‘์ž…๋‹ˆ๋‹ค. ํฌ๋กฌ network ์—์„œ ์š”์ฒญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์š”์ฒญ, ํ•˜๋‚˜๋Š” ์ด์ „, ์—ฌ์ „ํžˆ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@kaiqigong ๋น„๋””์˜ค๊ฐ€ ์›น ์‚ฌ์ดํŠธ์— ๋กœ์ปฌ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋””์˜ค์— ๋Œ€ํ•ด URL์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Œ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ง€๋‚œ์ฃผ์— ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

http://plnkr.co/edit/CL0Lh6VGMy0M3mR1SvVA?p=preview

plnkr์„ ํฌํฌํ•˜๊ณ  URL์„ ์„ค์ •ํ•˜๊ณ  ์‹ ๋ขฐํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

   .controller('VideoController', function($scope, $sce, $routeParams){
        $scope.name = "VideoController";
        $scope.params = {
          videoUrl: $sce.trustAsResourceUrl("http://www.videogular.com/assets/videos/videogular.mp4")
        };
   })

๋น„๋””์˜ค์— ์ง€์—ฐ์ด ์žˆ์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@ phillip-haydon ๋‹ต์žฅ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ท€ํ•˜์˜ plnkr์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋งํฌ๊ฐ„์— ๋น ๋ฅด๊ฒŒ ์ „ํ™˜ํ•˜์‹ญ์‹œ์˜ค.)
๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์€ ๊ฒฝ๋กœ ๋˜๋Š” ๋‹ค๋ฅธ DOM ์ž‘์—…์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋น„๋””์˜ค ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•ด๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ฌ์ „ํžˆ ๋น„๋””์˜ค ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„๋””์˜ค๋กœ ๋‹ค์‹œ ์ „ํ™˜ ํ•  ๋•Œ. ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐฉํ•ดํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋น„๋””์˜ค ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
๋™์˜์ƒ ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— src ์˜ ๋™์˜์ƒ์„ '' ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ค‘์ง€ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ ํŽœ์„ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค : http://codepen.io/cagegong/pen/bJHAz

๊ทธ๋ž˜์„œ ๋‚ด ๋งˆ์ง€๋ง‰ ํ•ด๊ฒฐ์ฑ… :

$scope.$on '$destroy', () ->
  angular.element('video').attr 'src', ''

๋„ค, 100 %๊ฐ€ ์•„๋‹Œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญํ•œ dom ์š”์†Œ๊ฐ€ ํŒŒ๊ดด ๋  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ ์ž์ฒด๋ฅผ ์ฃฝ์ด์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด Angular ์ž์ฒด๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜๋ฉด ์š”์ฒญ์ด ์ฃฝ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์€ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ.

์•ˆ๋…•ํ•˜์„ธ์š”.
์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

: +1 :

์™€, 2 ๋…„๋งŒ์— ์•„๋ฌด๊ฒƒ๋„. ๊ฐ๋„๊ฐ€ ์ „ํ˜€ ์œ ์ง€๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

Angular๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์˜ ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด๋ฏธ Angular 2.0์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ์— "fuck you"๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

@IDontEatSoap ์ด ์งˆ๋ฌธ์„ ์™œ ๊ฐ€์ ธ ์™”๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ปค๋ฐ‹ ๋ฐ ๋ฆด๋ฆฌ์Šค ๋ชฉ๋ก์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋งค์ฃผ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ๊ณ  ์ฃผ๋ง์„ ํฌํ•จํ•˜์—ฌ ํ•˜๋ฃจ์— ๋ช‡ ๋ฒˆ์˜ ์ปค๋ฐ‹์ด ์ฃผ์–ด์ง€๋ฉด ๊ฑฐ์˜ ์œ ์ง€๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค ...

@ phillip-haydon์€ ๋Œ€ํ™” ์ „๋ฌธ๊ฐ€๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๊ธฐ์ˆ ์  ๋ฌธ์ œ์— ์ง‘์ค‘ํ•˜์‹ญ์‹œ์˜ค. ๊ท€ํ•˜๋Š” ๋‹น์‚ฌ ์˜ ํ–‰๋™ ๊ฐ•๋ น์„ ์œ„๋ฐ˜ํ•˜๊ณ 

@IDontEatSoap @ phillip-haydon์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ–ฅํ›„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ ๋œ ํ’€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ„๋‹จํ•œ ๋™์˜์ƒ src ํƒœ๊ทธ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋‚˜์š”?

$ sde๋ฅผ ๋…ธ์ถœํ•˜๊ณ  src = "{{$ sce.trustAsResourceUrl (item.VideoUrl)}}"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋„๋ก ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜คํ•ดํ•˜์ง€ ๋งˆ์„ธ์š”. ์ €๋Š” ์•ต๊ทค๋Ÿฌ๋ฅผ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„๋””์˜ค src ๋ฐ SVG ํƒœ๊ทธ์™€ ๊ฐ™์€ ์ž‘์€ ๊ฒƒ๋“ค์ด ์ง€์›๋˜์ง€ ์•Š๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒƒ์€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์ผ์„ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค :) : +1 :

+1, ๋™์  ๋ฐ์ดํ„ฐ๊ฐ€์žˆ๋Š” ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ ์›น์บ ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ pkozlowski-opensource V2์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ์ด์ œ Angular๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋…ธ๋ ฅ์„ ๋‚ญ๋น„ํ•˜๋Š” ๋ฐ๋Š” 0 ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@ phillip-haydon ๊ทธ ์ •๋ณด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” node.js์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  Frontend Frameworks๋ฅผ ์ฐพ๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. V2 ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋“ค์–ด ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜์™€ ๋‚ด ํŒ€์€ V1๊ณผ V2 ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด React.js๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์‚ฌ๊ณ ๊ฐ€ ์•ผ๊ธฐํ•œ ๊ฑฐ๋Œ€ํ•œ ๊ท ์—ด์ด ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊ตํ›ˆ์„ ์ฃผ์—ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

:์‹ค๋งํ•œ:

ํ•„๋ฆฝ-Haydon์—์™€ @StevenDStanton @ - ๋‹น์‹ ์ด ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ์™€ ํ•จ๊ป˜ ๊ฐˆํ•˜์ง€๋งŒ ๋ฌผ๋ก  ๋‹น์‹ ์ด ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ์„ ํƒํ•œ ๊ฒƒ์„ ๋“ฃ๊ณ  ์ฃ„์†ก ์ž์‹ ์˜ ๊ฐœ๋ฐœ์„์œ„ํ•œ ์ž‘์—… ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์„.

๋ถ„๋ช…ํžˆ ๋งํ•˜๋ฉด AngularJS๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š์•˜์œผ๋ฉฐ ์‹ค์ œ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” Angular 1.x์˜ ์ง€์†์ ์ธ ๊ฐœ๋ฐœ์— ๊ทธ ์–ด๋Š ๋•Œ๋ณด ๋‹ค ๋” ๋งŽ์ด ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ํฐ ๋ฒ„์ „ ๋ณ€๊ฒฝ ์‚ฌ์ด์— ๊ฐ€์žฅ ์งง์€ ์‹œ๊ฐ„์ด ๋  AngularJS 1.4.0์„ ์ถœ์‹œ ํ•  ์˜ˆ์ •์ด๋ฉฐ ์ด์ „๋ณด๋‹ค ๋” ๋งŽ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์„ฑ์›์ด ์ฝ”์–ด ํŒ€์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์ด ์ถœ์‹œ๋˜๋ฉด AngularJS 1.5์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.์ด ๋ฒ„์ „์€ 2015 ๋…„ ๋ง ์ด์ „์— ์ถœ์‹œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. Google์€ ๋ง ๊ทธ๋Œ€๋กœ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํ”„๋กœ๋•์…˜์—์„œ AngularJS 1.x ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ์ง€๊ธˆ. Google์€ ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ท€ํ•˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ณ„์† ์ˆ˜๋ช… ๋˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ–๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Angular 2์™€ ๊ด€๋ จํ•˜์—ฌ-์ด ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ”ผ๋“œ๋ฐฑ์— ์˜ํ•ด ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ง„๋ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋” ํฌ๊ณ  ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•  ์ˆ˜์žˆ๋Š” ๋” ๋น ๋ฅด๊ณ  ๋” ์ž‘๊ณ  ๋” ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ์žฅ์น˜์—์„œ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. ์›น ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ํˆฌ๋ช…ํ•œ ์ง€์›์„ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ง„ํ™”๋ฅผ ๊ณ„์† ์ˆ˜์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ ํ„ฐ ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— AngularJS 1.x์— ๊ณ„์† ๋ณผํŠธ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ AngularJS๋ฅผ ๋Œ€์ค‘์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ๋ชฉํ‘œ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ถ”์ง„ํ•˜๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ํ–ฅํ›„ ๋ช‡ ๋…„ ๋™์•ˆ ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

AngularJS 1.x์—์„œ Angular 2๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ํ„ดํ‚ค ์—…๊ทธ๋ ˆ์ด๋“œ ์†”๋ฃจ์…˜์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ AngularJS 1.x์—์„œ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค AngularJS 1.x์—์„œ Angular 2๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์ด ํ™•์‹คํžˆ ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ <source> ์š”์†Œ์˜ src ์†์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž˜ ๋ณด์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์›๋ณธ ํฌ์Šคํ„ฐ์˜ ๋ฌธ์ œ๋Š” ng-if ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

http://plnkr.co/edit/rpiEg1ki7KXgD40zy8qV ์ฐธ์กฐ

๋‚˜๋Š” ๋‹จ์ง€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค

        $timeout(function () {
            $("video source").attr("src", 'https:' + file.url);
            $("video").attr("src", 'https:' + file.url);
        }, 500);

@ tot-ra-๋ธŒ๋ผ์šฐ์ €๊ฐ€ <video> ์š”์†Œ์˜ src ์†์„ฑ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ท€ํ•˜์˜ ๋ฒ„์ „์ด ์ž‘๋™ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค : http://plnkr.co/edit / 6dNmNjAvZ8b6t09mUE65

HTML5 ์‚ฌ์–‘์—์„œ : http://www.w3.org/TR/2014/REC-html5-20141028/embedded-content-0.html#the -source-element

์š”์†Œ๊ฐ€ ์ด๋ฏธ ๋น„๋””์˜ค ๋˜๋Š” ์˜ค๋””์˜ค ์š”์†Œ์— ์‚ฝ์ž… ๋œ ๊ฒฝ์šฐ ์†Œ์Šค ์š”์†Œ์™€ ํ•ด๋‹น ์†์„ฑ์„ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•ด๋„ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์ค‘์ธ ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ฏธ๋””์–ด ์š”์†Œ์˜ src ์†์„ฑ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  canPlayType () ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์„œ๊ฐ€ ๊ตฌ๋ฌธ ๋ถ„์„ ๋œ ํ›„ ์†Œ์Šค ์š”์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์†Œ์Šค ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” AngularJS (๋˜๋Š” ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ)์— ๋Œ€์ฒ˜ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ํ•„์š”ํ•œ ๊ฒฝ์šฐ <video> ํƒœ๊ทธ์˜ src ์†์„ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ๋ฏธ๋””์–ด ํŠน์ • ์ง€์‹œ๋ฌธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ @caitp ์˜ ng-media ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ค„์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ทจ์†Œ๋˜์ง€ ์•Š๋Š” ๋น„๋””์˜ค์— ๋Œ€ํ•œ ์š”์ฒญ์˜ ๋ฌธ์ œ์— ๊ด€ํ•ด์„œ๋Š”, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€์˜ ์•„์ด๋””์–ด๋ฅผ @kaiqigong ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ์„ ์‹œ์‚ฌ https://github.com/angular/angular.js/issues/1352#issuecomment -58865425ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์†Œ๋ฉธ ๋  ๋•Œ src ๋ฅผ "" ์„ค์ •ํ•˜๋Š” video ์š”์†Œ ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‹œ๋„ ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐํƒ€ ์ž ์žฌ์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ :

๊ตฌ๋… ์ทจ์†Œ. React๋ฅผ ์œ„ํ•ด AngularJS๋ฅผ ๋– ๋‚ฉ๋‹ˆ๋‹ค. ์ฃ„์†กํ•˜์ง€๋งŒ ์ˆ˜๊ณ  ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋„ค ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์ €๋„ ๊ตฌ๋…์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. http://aurelia.io/๋ฅผ ์œ„ํ•ด AngularJS๋ฅผ ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹น๋ฉดํ•œ ๊ธฐ์ˆ  ๋ฌธ์ œ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ๋Š” ์‹ค์ œ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋…ผ์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • <video> ์š”์†Œ๋Š” <source> ํƒœ๊ทธ์˜ src ์†์„ฑ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ ์ด์— ๋ฐ˜์‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ HTML5 ์‚ฌ์–‘์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ngSrc ์‚ฌ์šฉ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด <source> ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ด€์šฉ์  AngularJS ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, <video> ์š”์†Œ๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์„ ํƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— <source> ํƒœ๊ทธ์˜ src ์†์„ฑ์—์„œ ๋ณด๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฒฝ์šฐ์— ๋”ฐ๋ผ (๋ธŒ๋ผ์šฐ์ €) <video> ์š”์†Œ๊ฐ€ ๋™์˜์ƒ ๋‹ค์šด๋กœ๋“œ ์š”์ฒญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ทจ์†Œํ•˜์ง€ ์•Š์€ ๋‹ค์Œ ์š”์†Œ๊ฐ€ DOM์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด DOM์„ ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ  <video> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•˜์—ฌ ๋™์˜์ƒ์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์‹œ๊ฐ„์ด์—†๋Š” ์ƒํ™ฉ์—์„œ ์ƒˆ๋กœ์šด <video> ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์— ๊ฐ‡ํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <video> ์š”์†Œ์—์„œ ์•„์ง ๋ณด๋ฅ˜์ค‘์ธ ๋™์˜์ƒ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ํŒŒ๊ดด๋˜๊ธฐ ์ „์— src (๋˜๋Š” currentSrc ?) ์†์„ฑ์ด ๋นˆ ๋ฌธ์ž์—ด ( "" )๋กœ ์„ค์ •๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ค์ œ๋กœ ๋™์˜์ƒ ์š”์ฒญ์„ ์ทจ์†Œํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค currentSrc .

์ด๋Ÿฌํ•œ ๋ฌธ์ œ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ AngularJS์˜ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ญ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ์— ๋Œ€ํ•ด :
Angular ๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ HTML5 ์‚ฌ์–‘์— ์„ค๋ช… ๋œ๋Œ€๋กœ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์†Œ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” JavaScript๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์ฃผ์š” ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ๋ณด์ง€ ๋ชปํ–ˆ์ง€๋งŒ AngularJS์—์„œ ๊ฐ€์žฅ ๋งค๋ ฅ์ ์ธ ๋ฐฉ๋ฒ•์€ ์ผ๋ จ์˜ ์ง€์‹œ๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ๋žŒ๋“ค์ด ํšจ๊ณผ์ ์œผ๋กœ ์‹œ๋„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ด€์‹ฌ์‚ฌ์— ๋”ฐ๋ผ Angular 1.5์™€ ๋น„์Šทํ•œ ๊ฒƒ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์ž์ฒด ๋ชจ๋“ˆ๋กœ ํŒจํ‚ค์ง• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( ngCookies ๊ฐ€ ํŒจํ‚ค์ง•๋˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌ ํ•จ). 1.5 ๊ณ„ํš์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ์ด๊ฒƒ์„ ๋‹ค์‹œ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์€ ์œ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ท€ํ•˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๋„๋ก ๋•๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ์— ๋Œ€ํ•ด :
์ง€๊ธˆ์€ ๊ฐœ์ธ์ ์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด Chrome์—์„œ๋Š” ์‹ค์ œ๋กœ ์š”์†Œ๋ฅผ ํŒŒ๊ดด ํ•œ ํ›„์—๋„ ์ด์ „ <video> ์š”์†Œ ๋น„๋””์˜ค๋ฅผ ๊ณ„์† ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ „ํ™˜ ํ›„ ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์š”์ฒญ์€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ <video> ์š”์†Œ์˜ ๋™์˜์ƒ์ด๋กœ๋“œ๋˜์ง€ ์•Š๋„๋กํ•ฉ๋‹ˆ๋‹ค.

screen shot 2015-02-26 at 11 14 02

์—ฌ๊ธฐ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์‹œ ๋น„๋””์˜ค ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ทธ๋™์•ˆ ์ž์‹ ์˜ video ์ง€์‹œ๋ฌธ์„ ์ œ๊ณตํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (http://plnkr.co/edit/QLMJd24rxvklr638e57Q?p=preview ์ฐธ์กฐ). :

  .directive('video', function() {
    return {
      restrict: 'E',
      link: function(scope, element) {
        scope.$on('$destroy', function() {
          element.prop('src', '');
        });
      }
    };
  })

screen shot 2015-02-26 at 11 17 32

์—ฌ๊ธฐ์—์„œ ๋น„๋””์˜ค๋ณด๊ธฐ์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด ๋น„๋””์˜ค ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์ค‘์ง€๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น๋ถ„๊ฐ„์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ถŒ์žฅ๋˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@petebacondarwin ... w3c ์‚ฌ์–‘์„ ์‚ดํŽด๋ณด๋ฉด ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ๋ฌธ์„œ์—์„œ ์ค‘๋‹จ๋˜๋ฉด ์ŠคํŠธ๋ฆผ๋กœ๋“œ๋„ ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. window.stop() ์ „ํ™”ํ•˜๋ฉด ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์ทจ์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ถ๊ทน์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ์ • ์ˆ˜์ค€์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@daleyjem ์ด ์•„์ด๋””์–ด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋™์˜์ƒ์ด ์ŠคํŠธ๋ฆฌ๋ฐ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ต์‹ฌ ์ง€์นจ์—์„œ๋Š”์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•„ํ„ฐ ๋งŒ๋“ค๊ธฐ :
app.filter ( "trustUrl", [ '$ sce', function ($ sce) {
return function (recordingUrl) {
return $ sce.trustAsResourceUrl (recordingUrl);
};
}]);

ํŒŒ์ผ๋ณด๊ธฐ์—์„œ :
<audio src = "{{Your_URL | trustUrl}}"audioplayer controls> audio>

์ฐธ๊ณ  : ์˜ค๋””์˜ค ํƒœ๊ทธ์˜ ๊ณต๊ฐ„์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Videogular์˜ ์ œ์ž‘์ž์ž…๋‹ˆ๋‹ค.

@petebacondarwin์ด ์„ค๋ช…ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ AngularJS์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋Œ€๋ถ€๋ถ„ HTML5์—์„œ ๋น„๋””์˜ค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋น„๋””์˜ค ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ฐ”์ผ ์žฅ์น˜์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•  ๋•Œ ๋”์šฑ ์ด์ƒํ•ด์ง‘๋‹ˆ๋‹ค.

์ €๋Š” Videogular๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋””์˜ค์™€ HTML5๋กœ ๋งŽ์ด ์‹ธ์› ์œผ๋ฉฐ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋กํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ AngularJS ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋„์›€์„ ์›ํ•˜๋ฉด ์ด์— ๋Œ€ํ•œ ๊ฒธ์†ํ•œ ์ง€์‹์„ ๊ณต์œ ํ•˜๊ณ  ์ˆ˜์ •์— ๊ธฐ์—ฌํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •๋ง ๋‚˜๋ฅผ ๊ดด๋กญํžˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Angular 2์—์„œ๋Š” ์ด๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‘ ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ๋น„์Šทํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

+1

๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด์— ์ง€์‹œ๋ฌธ์ด์žˆ๋Š” ๊ฒฝ์šฐ src url ๋ณ€์ˆ˜๋ฅผ๋ณด๊ณ  ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

link: function (scope, element, attrs) {
    var video = element.find('video')[0];
    scope.$watch('source.url', function (val) {
        video.src = val;
    });
}

์ˆ˜๋งŽ์€ ์‹œํ–‰ ์ฐฉ์˜ค ๋์— ๋งˆ์นจ๋‚ด Android 4.2.2, 4.3, 4.4.4, 5.0.0 ๋ฐ 5.1.0์—์„œ ์•ˆ์ •์ ์œผ๋กœ ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. Crosswalk ์„ค์น˜ ๋ฐ Videogular ์‚ฌ์šฉ

์‚ฌ์šฉ์ž ์ง€์ • ์ง€์‹œ๋ฌธ์œผ๋กœ ์ˆ˜์ •

<source ng-repeat="source in sources" vsrc="{{ source.path }}" type="{{ source.type }}" html5vfix>


//Html5 video fix
eshop.directive('html5vfix', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attr) {
            attr.$set('src', attr.vsrc);
        }
    }
});

ฤฐ json์„ ์‚ฌ์šฉํ•˜์—ฌ db์˜ URL ๋น„๋””์˜ค๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (((๋„์™€์ฃผ์„ธ์š”

๋‚ด ์žฌ์ƒ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋น„๋””์˜ค๊ฐ€ ๊ฑฐ๊พธ๋กœ ํ‘œ์‹œ๋˜๊ณ  ์ „์ฒด ํ™”๋ฉด์„ ๋ˆ„๋ฅด๋ฉด์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

+1 src ๋˜๋Š” ngSrc๋กœ URL์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด ์˜ค๋ฅ˜๊ฐ€ ์ทจ์†Œ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ด ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์•„์ง ํ•ด๊ฒฐ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์€ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

http://www.rubencanton.com/blog/2014/07/adding-video-src-with-angular.html

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰