AngularJS在自訂指令中傳遞Model

來源:互聯網
上載者:User

AngularJS在自訂指令中傳遞Model

本文是對AngularJS權威指南8.2節的理解,書中的解釋比較混亂,花了一些時間才理解作者表達的意思。

假如我們建立了一個指令,用於產生一個包含input和a標籤。如果我們想input標籤的內容通過ng-model的方式傳遞出去(例如傳遞到指令外的另一個input),我們可能會這麼寫:

<script src="angular.js"></script>   <script> angular.module('myApp', []) .directive('myDirective', function() { return { restrict: 'A', replace: true, scope: { myUrl: '@someAttr', myLinkText: '@' }, template: '\ \ \ {{myLinkText}}\ \ ' } }) </script>

產生的HTML如所示:

但是這不能達到我們的預期:資料只能從第一個input傳遞到第二個input,而不能從第二個input傳遞到第一個input。

原因是指令內部有獨立的範圍,指令內的{{myUrl}}不能直接被外部共用。

將代碼做如下修改,可以實現被外部共用,注意修改的部分有注釋:

<script src="angular.js"></script>   <script> angular.module('myApp', []) .directive('myDirective', function() { return { restrict: 'A', replace: true, scope: { //***************************************** myUrl: '=someAttr',//@修改為了= //***************************************** myLinkText: '@' }, template: '\ \ \ {{myLinkText}}\ \ ' } }) </script> 總結

指令內部model共用到外部,只需要將”@”改為”=”,並且將對應的指令的{{}}刪掉即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.