2017-05-10 4 views
0

コントローラから変数にアクセスしようとしていますが、以下のエラーが表示され続けます。 vmが定義されていない理由がわかりません。コントローラから変数にアクセスするAngularJSが参照エラーを返します。

Uncaught ReferenceError: vm is not defined at localhost/:1

index.htmlを

<!DOCTYPE html> 
<html ng-app="test" ng-controller="mainController as vm"> 

<head> 
     <style id="antiClickjack">body{display:none !important;}</style> 
     <script type="text/javascript"> 
      var Meta = vm.Meta; 
     </script> 
</head> 

<body> 
    <section ui-view></section> 
</body> 
</html> 

mainController.js

+0

ですか?また、なぜあなたは、あなたが必要としないものを参照しているのですか? – alphapilgrim

+0

このコード: ' ' ここで何をしようとしていますか?これは角の反パターンです.vmは定義されていません。 Angularはそれが何であるか分かりません。 – couzzi

+0

@couzziメタオブジェクトをjavascriptオブジェクトとして公開して、サードパーティのスクリプトがそのオブジェクトを使用できるようにしたいとします。 – Aashil

答えて

0
(function() { 
"use strict"; 

angular 
    .module("test") 
    .controller("mainController", mainController); 

mainController.$inject = [ 
    "$rootScope", 
    "$window", 
    "$scope", 
    "$log", 
    "UserService" 
]; 

function mainController($rootScope, $window, $scope, $log, UserService) { 

    var vm = this; 

    vm.Meta = function() { 
     var Meta = {}; 
     UserService.getUserData().then(
      function(response) { 
       if (response.data) { 
        Meta = response.data; 
        Meta.firstName = response.data.name || ""; 
       } 
      } 
     ); 
     return Meta; 
    }; 
} 

代わりthis$scopemetaを取り付け:

$scope.Meta = function() { 
    ... 
} 

次に、あなたのインラインで<script>ブロックをあなたのスコープを公開:

var scope = angular.element(document.querySelector('[ng-app="test"]')).scope(); 
var Meta = scope.Meta; 

また、全くわからあなたがロードしてくださいcontroller as構文を使用することによって、このシナリオには何も得ていないので、ng-controller="mainController"

+0

これは '(index):1をスローします。Uncaught ReferenceError:角度が定義されていません。 at(index):1' – Aashil

+0

ここに他のポスターが正しいと思います。あなたは完全なHTMLを投稿したHTMLですか?もしそうなら、必要なjavascriptインクルードが欠けています。 Angular.jsやコントローラファイルは含まれていません。あなたが持っているすべてのコードを投稿してください。 plunkr.coまたはjsfiddle.netミラーへのリンクが理想的です。 – couzzi

0

にこれを変更しますmainController.js?私はそれがさらに<head/>

に含まれて表示されていない、あなたの例では、匿名関数の閉鎖を示していないと、それはあなたが頭の中にスクリプトタグを持っていない理由の即時呼び出し(function (angular) {...})(angular);

+0

公正な点ですが、これは答えではありません。上記質問のコメントスレッドでOPの質問をしてください。 – couzzi

+0

私はできれば:)。ごめんなさい。 –

関連する問題