0

私はangularjsを初めて使っています。 1つのjsファイルに2つの異なるモジュールを作成しようとしましたが、それらのモジュールの1つを手動で要素にブートストラップしました。これは、stackoverflowの質問の1つで示唆されました。しかし、これはうまくいきません。 両方のモジュールが独立して動作します。 ここで何がうまくいかないのか分かりません。 は、ここに私のコードです: -angularjs 1手動ブートストラップdoes not work

myApp.js

var app = angular.module("myApp", []); 
var myController = app.controller("ctrl1", function($scope){ 
"use strict"; 
$scope.fname = "Bill"; 
$scope.lname = "Goldberg"; 
$scope.updatevalue = function() { 
    $scope.fullname = $scope.fname + $scope.lname; 
    //$scope.fname = "newName" 
}; 
}); 
app.directive("w3TestDirective", function() { 
    "use strict"; 
    return { 
     template : "<h1>This is my life!</h1>" 
    }; 
}); 

var loginController = angular.module('loginController', []); 
loginController.controller('loginCntrl', function ($scope) { 
"use strict"; 
$scope.username="email"; 
$scope.password="password"; 
$scope.present = false; 
$scope.login = function() { 
    "use strict"; 
    if ($scope.username == "Amar" & $scope.password == "Amar") { 
     $scope.present=true; 
     $scope.loginMessage = "logged in successfully"; 
    } else { 
     $scope.present=true; 
     $scope.loginMessage = "Invalid username or password"; 
    } 
} 
}); 

angular.bootstrap(document.getElementById("loginDiv"),['loginController']); 

Index.htmlと

<!DOCTYPE html> 
<html> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script> 
<!--script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.js"></script--> 
<script src="scripts/services/myApp.js"></script> 
<!--script src="scripts/services/login.js"></script--> 
<body> 

    <div id="demoDiv" ng-app="myApp" ng-controller="ctrl1"> 
    <span>Values:</span> 
    <input type="text" ng-model="fname"/> 
    <input type="text" ng-model="lname"/> 
    <button ng-click="updatevalue()">fullname</button> 
    <br></br> 
    {{ fullname }} 
    <br></br> 
    <w3-test-directive></w3-test-directive> 
    </div> 
    <br></br> 
    <div id="loginDiv" ng-app="loginController" ng-controller="loginCntrl"> 
    <input type="text" ng-model="username"/> 
    <input type="text" ng-model="password"/> 
    <button ng-click="login()">submit</button> 
    <br></br> 
    <div ng-if="present"> {{ loginMessage }} </div> 
    </div> 

</body> 
</html> 
+0

更新は、角度の行動との最初のdivが働くdemoDiv IDを持つ、すなわちDIV動作しますが、手動でdoesnot –

+0

手段を「動作しない」何を指定する必要がありますブートストラップされる1。しかし、おそらく問題は、ページロードが完了する前に 'angular.bootstrap'が実行されることです。また、複数のブートストラップは一般的な方法ではなく、開発者が自分が何をしているかを知っている場合にのみ使用してください(実際はほとんどありません)。あなたが「新しい角度に慣れている」という事実は、おそらくあなたが間違ったやり方をしていることを示唆しています。 – estus

+0

私の悪い!!!!バインディングは機能しません.2番目のdivは角の振る舞いを示さないので、ブラウザで{{loginMessage}}を取得します。しかし、最初のdivは正常に動作し、角の動作を示します –

答えて

0

これは完全に間違ったアプローチです。 CANにはコントローラが複数のモジュールに含まれていますが、常にそのアプリケーションのメインの親モジュールである単一のモジュールが必要です。 loginDivからng-appを削除し、

<body ng-app="myApp"> 

    <div id="demoDiv" ng-controller="ctrl1"> 
... 

次:

<div id="loginDiv" ng-controller="loginCntrl"> 
body要素に ng-appを移動し、

まず:

あなたの親モジュールであるのがmyAppを想定してみましょう、といくつかの変更を行います

最後に、は、の0 myAppモジュールにモジュール:今

var app = angular.module("myApp", ['loginController']); 

は、アプリが問題なく両方のコントローラを取り付けることができるようになります。

http://plnkr.co/edit/rkFY0ASCHaQUTByaHJg3?p=preview

0

私は次のコードで、私の問題を修正: -

var app = angular.module("myApp", ['utilModule','loginModule']); 
var myController = app.controller("ctrl1", function($scope){ 
"use strict"; 
$scope.fname = "Bill"; 
$scope.lname = "Goldberg"; 
$scope.updatevalue = function() { 
    $scope.fullname = $scope.fname + $scope.lname; 
    //$scope.fname = "newName" 
}; 
}); 
app.directive("w3TestDirective", function() { 
    "use strict"; 
    return { 
     template : "<h1>This is my life!</h1>" 
    }; 
}); 


<!DOCTYPE html> 
<html> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script> 
<!--script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.js"></script--> 
<script src="scripts/services/myApp.js"></script> 
<script src="scripts/services/util.js"></script> 
<script src="scripts/services/login.js"></script> 
<body ng-app="myApp"> 

    <div id="demoDiv" ng-controller="ctrl1"> 
    <span>Values:</span> 
    <input type="text" ng-model="fname"/> 
    <input type="text" ng-model="lname"/> 
    <button ng-click="updatevalue()">fullname</button> 
    <br></br> 
    {{ fullname }} 
    <br></br> 
    <div ng-controller="utilCntrl"> 
     {{ test }} 
    <testDirective></testDirective> 
    </div> 
    <w3-test-directive></w3-test-directive> 
    </div> 
    <br></br> 
    <div id="loginDiv" ng-controller="loginCntrl"> 
    <input type="text" ng-model="username"/> 
    <input type="text" ng-model="password"/> 
    <button ng-click="login()">submit</button> 
    <br></br> 
    <div ng-if="present"> {{ loginMessage }} </div> 
    </div> 

</body> 
</html> 

のみ1の問題があり、testDirectiveタグは、ブラウザ上で何を印刷しdoesnot。しかしそれは要件ではないので、私は当分これを無視します。 これは@Claiesが投稿したものであることを認識しています。 Claies、あなたの時間と労力をどうもありがとう。

+0

ちょうどアップデート、私も同様に動作するtestDirectiveタグを持っています! –

0

角度アプリケーションをブートストラップするためにng-app指令とangular.bootstrap関数を使用することはできません。 ng-appまたはangular.bootstrapを使用します。

"myApp"と "loginController"という2つのモジュールがある場合は、 "loginController"に "myApp"の依存関係を設定する必要があります。 "myApp"は、外部アプリケーションまたはカスタムの依存関係を追加できる角型アプリケーションモジュールです。

angular.module('myApp', ['loginController', 'ui-router', 'etc'...]) 
+0

あなたは正しくbtinocoですが、私はこれを考え出し、アプリケーションを適切に配線しました。この質問に答えるためにタイムアウトを取ってくれてありがとう。 –