組み込みシステムのUIにAngularを使用しています。私はあなたがデスクトップブラウザ(組み込みシステムのシミュレーション)でUIを実行できるように、アプリケーションの設定を持っています。私は組み込みシステムのすべてのAPI関数を含むサービス層を持っています。そこで、シミュレーションのために、API関数をシミュレートするためにサービスレイヤーをスワップアウトします。これはうまくいきますが、今私の問題は、組み込みシステムの一部ではないシミュレーションで実際に行う必要があることです。別のコントローラからAngular Scope変数を設定する方法
いずれのコントローラでもシミュレーションのコードは必要ありません。単一の.jsファイルを読み込んで別のコントローラで関数を呼び出すだけで、シミュレーション用のコントローラを正常に取得できましたが、スコープ変数の値を変更することはできません。私はそれが期待されるように動作しません。
ここには何が起こるかを示すデモがあります。私は、第1のコントローラで第2のコントローラから関数を呼び出し、パラメータを渡しています。コンソールは正しい値を出力しますが、スコープ変数は変更されません。
var app = angular.module('myApp', [])
.controller('Ctrl_1', function($scope)
{
$scope.myFunction = function(myParam)
{
console.log('Ctrl_1: ' + myParam);
// Demonstrates that the function is called, and with the correct value for myParam.
$('.console').append('<li>' + myParam + '</li>');
$scope.myVar = myParam;
}
$scope.myFunction('Foo');
});
// sim.js
$('.app-wrapper').attr('ng-controller', 'Ctrl_2');
app.controller('Ctrl_2', function($scope, $controller, $timeout)
{
var Ctrl_1_ViewModel = $scope.$new();
$controller('Ctrl_1', { $scope: Ctrl_1_ViewModel });
//$timeout(function() { Ctrl_1_ViewModel.myFunction('Bar') });
$scope.testFunction = function()
{
Ctrl_1_ViewModel.myFunction('Bar');
console.log('Ctrl_2: ' + Ctrl_1_ViewModel.myVar);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div ng-app="myApp" class="app-wrapper">
<div ng-controller="Ctrl_1">
<h3>myVar = '{{ myVar }}'</h3>
<button ng-click="testFunction()">Set myVar equal to 'Bar'</button>
</div>
<ul class="console" style="list-style-type: none; padding: 0;"></ul>
</div>
私もJSFiddle of the demoを持っています。
これを動作させるにはどうすればよいですか?あるいは、私が検討すべき別のアプローチがありますか?
あなたは、ソリューションを提供するための –