>  Q&A  >  본문

angular.js - 关于 angular 几个问题

现有 angularjs 问题俩枚

一.
通过 $http 加载了一篇文章,该文章有标题, 现想实现文章加载后将文章标题替换掉浏览器标题. html 结构如下

<!doctype html>
<html data-ng-app="app">
<head data-ng-controller="head">
 <meta charset="utf-8"/>
 <titlte data-ng-bind="title||'Document'"></title>
</head>
<body>
 <p data-ng-controller="main">
  <button data-ng-click="getPost()">GET POST</button>
  <p data-ng-module="post">
   <h2 data-ng-bind="post.title"></h2>
   <article data-ng-bind="post.content"></article>
  </p>
 </p>
</body>
</html>

也就是 post 加载后浏览器标题和 post.title 显示一样.
已搜索过跨域通信的解决方案, 并且看到了 这里(AngularJS控制器controller如何通信?) , 这三种方法, 前俩种并部适合我当前这个结构, 因此使用第三种方式, 并且也是实现了同步, 但是致命的是需要通过一个触发(点击 等)才能够同步, so 其实直白了就是想问问怎么能够自动同步 而不是通过触发来同步.

二.
$scope 回调,
还拿这个加载文章来说, 比如加载的文章中有 pre 标签包裹的代码快, 在加载后, 要通过其他库来实现高亮, so 需要在数据绑定并且渲染完毕后来执行高亮操作. 但是并没有搜到什么解决方案.
自己也写了些, 俩中方案
第一种:
数据绑定后以后递归查询当前页面的所有 pre 标签, 找到后或者限定次数后 高亮 结束.
第二种:
window.setTimeout(function(){}, 1000);
俩中结果了, 第一种是不行的. 无论递归多少次都无法找到 pre 标签
第二种可行, 不过感觉这并不是一个好的解决方案

过去多啦不再A梦过去多啦不再A梦2713일 전516

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-05-15 16:54:56

    도메인 간 통신이 무슨 뜻인지 잘 모르겠습니다. 컨트롤러 간의 통신이 가능할까요? 그리고 방아쇠?

    1. 이렇게 data-*를 사용하지 않고 ng-bind를 직접 작성하면 됩니다
    2. </code>이 위치한 컨트롤러는 <code>main</code> 컨트롤러와 동일한 수준에 있습니다. 외부에 상위 컨트롤러를 추가한 다음 <code>mainController.$scope.$parent.title = post.title</code>을 사용하거나 $rootScope를 직접 사용할 수 있습니다(권장하지 않음). $emit/$broadcast/$on을 통해서도 이 작업을 수행할 수 있지만 반드시 필요한 것은 아닙니다. <code><title></code> 所在的controller是和 <code>main</code>这个控制器平级的。你可以在他们之外加一个父控制器,然后<code>mainController.$scope.$parent.title = post.title</code>, 或者直接用$rootScope (不怎么推荐)。也可以通过$emit/$broadcast/$on 这样来做 不过没什么必要了。<br> 然后:</p> <pre><code><title ng-bind="$parent.title||'Default Title'"></title> </code></pre> <p>3、 以 <code>angular highlight</code>为关键字可以在github搜到一些不错的高亮插件。 bower install 之<br> 4、 不要用window.setTimeout, 用angular提供的 <code>$timeout()</code> 它会返回一个promise。<br> 5、 其实对于第二个问题更好的方法是使用 <code>$resource.get().$promise.then();</code> 그런 다음: </p> 으아악 🎜3. Github에서 <code>angular 하이라이트</code>를 키워드로 사용하면 좋은 하이라이트 플러그인을 검색할 수 있습니다. 🎜의 정자 설치 4. window.setTimeout을 사용하지 마세요. Angle에서 제공하는 <code>$timeout()</code>을 사용하세요. Promise가 반환됩니다. 🎜 5. 실제로 두 번째 문제를 해결하는 더 좋은 방법은 <code>$resource.get().$promise.then();</code> // 또는 $http 서비스를 사용하여 원격 데이터가 구현 전에 로드되었습니다. 🎜</p><span class="detail_answer2" style="float: left" fid="200511"><div class="btn wenda-second-btn" name="巴扎黑" fid="200511">회신하다</div></span><i class="layui-icon layui-icon-praise wenda-praise-btn"><span>0</span></i></div></li><li class="layui-clear"><div class="discuss-img"><img src="https://img.php.cn/upload/avatar/000/000/001/6251028808086368.png" alt="PHP中文网"></div><div class="info f-left ml-10"><p><a rel="nofollow" href="http://m.php.cn/ko/member/1.html" fid="" class="replyer-name">PHP中文网</a><span>2017-05-15 16:54:56</span></p><p class="content Overflow_line"><p>기사를 렌더링하는 템플릿의 제목 요소에 클래스<code>wtitle</code>를 추가하면 현재 페이지의 제목이 기사의 제목으로 변경됩니다.<br> 위챗에서도 가능해요~</p> <p>wtitle의 기능은 element.text()의 내용을 document.title로 설정하는 것입니다. iframe을 사용하는 목적은 앱의 웹뷰에서 이를 효과적으로 만드는 것입니다</p> 으아악</p><span class="detail_answer2" style="float: left" fid="200512"><div class="btn wenda-second-btn" name="PHP中文网" fid="200512">회신하다</div></span><i class="layui-icon layui-icon-praise wenda-praise-btn"><span>0</span></i></div></li><div class='more'></div></div><div class='discuss-submit bg-white'><li class='info layui-clear'><span class='f-left' id='discuss-submit-close'>취소</span><span class='f-left wenda-reply-text'>회신하다</span></li><li class='layui-clear'><textarea type='text' rows="6" placeholder="리뷰할 내용을 입력해주세요" class="wenda-reply-content-text"></textarea></li><li class='layui-clear'><button class="layui-btn layui-btn-danger f-right wenda-reply-publish-button">출판하다</button></li></div><div class='lock-screen' id='lock-screen'></div><script src="/static/ueditor/third-party/SyntaxHighlighter/shCore.js"></script><div class="headerMask"></div><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><div class="nphpFoot"><div class="nphpFootBg"><ul class="nphpFootMenu"><li><a href="http://m.php.cn/ko/"><b class="icon1"></b><p>집</p></a></li><li><a href="http://m.php.cn/ko/course.html"><b class="icon2"></b><p>강의</p></a></li><li><a href="http://m.php.cn/ko/wenda.html"><b class="icon4"></b><p>Q&A</p></a></li><li><a href="http://m.php.cn/ko/login"><b class="icon5"></b><p>나의</p></a></li><div class="clear"></div></ul></div></div><div class="nphpYouBox" style="display: none;"><div class="nphpYouBg"><div class="nphpYouTitle"><span onclick="$('.nphpYouBox').hide()"></span><a href="http://m.php.cn/ko/"></a><div class="clear"></div></div><ul class="nphpYouList"><li><a href="http://m.php.cn/ko/"><b class="icon1"></b><span>집</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/course.html"><b class="icon2"></b><span>강의</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/article.html"><b class="icon3"></b><span>기사</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/wenda.html"><b class="icon4"></b><span>Q&A</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/dic.html"><b class="icon6"></b><span>사전</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/course/type/99.html"><b class="icon7"></b><span>수동</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/xiazai/"><b class="icon8"></b><span>다운로드</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ko/faq/zt" title="주제"><b class="icon12"></b><span>주제</span><div class="clear"></div></a></li><div class="clear"></div></ul></div></div><div class="nphpDing" style="display: none;"><div class="nphpDinglogo"><a href="http://m.php.cn/ko/"></a></div><div class="nphpNavIn1"><div class="swiper-container nphpNavSwiper1"><div class="swiper-wrapper"><div class="swiper-slide"><a href="http://m.php.cn/ko/" >집</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/article.html" >기사</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/wenda.html" class="hover">Q&A</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/course.html" >강의</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/faq/zt" >주제</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/xiazai" >다운로드</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/game" >게임</a></div><div class="swiper-slide"><a href="http://m.php.cn/ko/dic.html" >사전</a></div><div class="clear"></div></div></div><div class="langadivs" ><a href="javascript:;" class="bg4 bglanguage"></a><div class="langadiv" ><a onclick="javascript:setlang('zh-cn');" class="language course-right-orders chooselan " href="javascript:;"><span>简体中文</span><span>(ZH-CN)</span></a><a onclick="javascript:setlang('en');" class="language course-right-orders chooselan " href="javascript:;"><span>English</span><span>(EN)</span></a><a onclick="javascript:setlang('zh-tw');" class="language course-right-orders chooselan " href="javascript:;"><span>繁体中文</span><span>(ZH-TW)</span></a><a onclick="javascript:setlang('ja');" class="language course-right-orders chooselan " href="javascript:;"><span>日本語</span><span>(JA)</span></a><a onclick="javascript:;" class="language course-right-orders chooselan chooselanguage" href="javascript:;"><span>한국어</span><span>(KO)</span></a><a onclick="javascript:setlang('ms');" class="language course-right-orders chooselan " href="javascript:;"><span>Melayu</span><span>(MS)</span></a><a onclick="javascript:setlang('fr');" class="language course-right-orders chooselan " href="javascript:;"><span>Français</span><span>(FR)</span></a><a onclick="javascript:setlang('de');" class="language course-right-orders chooselan " href="javascript:;"><span>Deutsch</span><span>(DE)</span></a></div></div><script> var swiper = new Swiper('.nphpNavSwiper1', { slidesPerView : 'auto', observer: true,//修改swiper自己或子元素时,自动初始化swiper observeParents: true,//修改swiper的父元素时,自动初始化swiper }); </script></div></div><!--顶部导航 end--><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></body></html>