AngularJs中ng-controller下的函數在調用時為什么會執行兩次?


最近在學習AngularJs的過程中,自己做了個demo,但程序運行后卻發現有個地方運行不對勁,糾結了半天,也問了,也查了,但是沒有一個滿意的答案,所以特地貼出來,請教各位大神(先說聲謝謝了!)。為了更直觀的說明問題,直接貼代碼:

 1 <!doctype html>
 2 <html ng-app="app">
 3 <head>
 4     <title>使用$provide自定義服務</title>
 5 <script src="http://cdn.bootcss.com/angular.js/1.5.0/angular.min.js"></script>
 6 </head>
 7 <body>
 8     <div ng-controller="ctr1">
 9         <div class="show">
10             服務返回的值:<br>
11             <span>姓名:{{info('name')}}</span><br>
12             <span>性別:{{info('sex')}}</span><br>
13             <span>年齡:{{info('score')}}</span><br>
14             <span>小明的信息:{{val}}</span>
15         </div>
16     </div>
17     <script type="text/javascript">
18         var m1= angular.module('app', [], function ($provide) {
19             $provide.factory('$output', function () {
20                 var stu = {
21                     name: '張三',
22                     sex: '',
23                     score: '60'
24                 };
25                 return stu;
26             });
27             $provide.value("myval","33333");
28             $provide.service("myservice",function(){
29                 return {
30                     name:"小明",
31                     age:18
32                 }
33             })
34         });
35         m1.controller('ctr1', function ($scope, $output,myval,myservice) {
36  $scope.info = function (n) {
37                 for (var _n in $output) {
38                     console.log(_n);  // 打印key
39                     if (_n == n) {
40                         return ($output[_n]);
41                     }
42                 }
43             };
44             $scope.val=myservice;
45         });
46     </script>
47 </body>
48 </html>

在第11、12、13行調用了第36行的info()函數后,按照常規邏輯,console.log(_n);后,在控制台應該打印出

    name

  name

  sex

  name

  sex

  score

但是結果出乎我的意料,程序竟然執行了兩遍,我百思不解。

我考慮着是不是AngularJs的底層就是這樣運行的,我自己又試了一下,代碼如下:

 1 m1.controller('ctr1', function ($scope, $output,myval,myservice) {
 2 $scope.info = function (n) {
 3 console.log(1); // 打印結果為6個1
 4 for (_n in $output) {
 5 console.log(_n); //打印key
 6 console.log(1); // 打印結果為12個1
 7 if (_n == n) {
 8 return ($output[_n]);
 9 }
10 }
11 };
12 $scope.val=myservice;
13 });

對於這個問題,我網上查了很多資料也問了一些高手,也沒有明確的解決辦法,各路大神各顯神通吧,小生在這里要受教了,多謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM