2016-11-13 10 views
1

AngularJsとJavaScriptを試している間に、JavaScriptの外部関数から$scopeを呼び出そうとしましたが、 :

"Uncaught TypeError: Cannot read property 'message' of undefined" .

は、ここに私のコードです:

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <title></title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
    <script> 
    var app = angular.module('app', []); 
    var msg = "new message" 
    app.controller('ctrl', ['$scope', function ($scope) { 
    $scope.message = msg; 
    }]); 
    function xfunc(){ 
    var data = angular. 
    element(document.querySelector('[ng-controller="ctrl"]')). 
    scope().message; 
    return data 
    } 
    if (typeof 'xfunc()' !== 'undefined') { 
    console.log(xfunc()); 
    }else{ 
    console.log("the type of is : ", + typeof 'xfunc()') 
    } 
    </script> 
    </head> 
    <body> 
    <div ng-app="app" ng-controller="ctrl"> 
    {{message}} 
    </div> 
    </body> 
    </html> 

私はコンソールからxfunc()を呼び出していたし、それがエラーなしで正常に動作します。
エラーの原因をご存じですか?サードパーティのライブラリを持たない純粋なJavascriptとAngularJSだけでも可能ですか? (もちろん可能な場合)
ありがとうございます!

+0

コンソールで正常に動作する場合は、AngularJSがブートストラップされる前に関数を呼び出すと思います。それを待たなければなりません。さもなければ、オブジェクトプロパティはまだ利用できません。 – user3492940

+0

あなたの答えをありがとう、私はあなたがそれについて完全に正しいと思いますが、問題はAngularJsをブートストラップに待つ方法です? – user2245788

+0

はい、 "setTimeout(function(){console.log(xfunc());}、3000);"より効率的な構文があるのだろうか? PS:ありがとう! – user2245788

答えて

0

問題は解決は私が追加されているということですので、AngularJs前に呼び出される関数は、ブートストラップされたということでした。

document.addEventListener("DOMContentLoaded", function(event) { 

    }); 

ロードするために「(xfunc)」を「体が」そう、ここで、ロードされた後

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <title></title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
    <script> 
    var app = angular.module('app', []); 
    var msg = "new message" 
    app.controller('ctrl', ['$scope', function ($scope) { 
    $scope.message = msg; 
    }]); 
    function xfunc(){ 
    var data = angular. 
    element(document.querySelector('[ng-controller="ctrl"]')). 
    scope().message; 
    return data 
    } 
    document.addEventListener("DOMContentLoaded", function(event) { 
    if (typeof 'xfunc()' !== 'undefined') { 
    console.log(xfunc()); 
    }else{ 
    console.log("the type of is : ", + typeof 'xfunc()') 
    } 
    }); 
    </script> 
    </head> 
    <body> 
    <div ng-app="app" ng-controller="ctrl"> 
    {{message}} 
    </div> 
    </body> 
    </html> 
関連する問題