私は$watch
の機能を持っています。国が選択されたときに時計を表示しますが、変更されたデータをスコープに保存していません。私は1つのUIビューを持っていましたが、うまくいきましたが、構造を変更して同じページの下に2つのUIビューを表示しました。変更の理由は、きれいなHTMLページを持っていたからです。私は常に1つのUIビューに戻ることができましたが、それは面倒です。これが問題を起こした場所です。ここ
がapp.js
$stateProvider
.state('homepage',{
templateUrl: '/static/partial/home/homeLayout.html',
controller: 'UploadFileCtrl',
})
.state('homepage.show',{
url: '/',
views: {
querySetup: {
templateUrl: '/static/partial/home/querySetup.html',
},
queryResults: {
templateUrl: '/static/partial/home/queryResults.html',
},
}
})
layout.htmlある - UI-ビュー:
<div class="col-sm-12 panel-container">
<div class="col-sm-6" style="height: 100%;">
<div ui-view="querySetup" ></div>
</div>
<div class="col-sm-6" style="height: 100%;">
<div ui-view="queryResults"></div>
</div>
</div>
コントローラの腕時計:
$scope.currentCountries = [
{
name: 'United States',
code: 'US'
},
{
name: 'United Kingdom',
code: 'GB'
},
{
name: 'Germany',
code: 'DE'
},
{
name: 'France',
code: 'FR'
},
{
name: 'China',
code: 'CN'
},
{
name: 'Japan',
code: 'JP'
}
];
$scope.$watch('pickedCountry', function(){
if($scope.pickedCountry != null){
$scope.countryCode = $scope.pickedCountry.code;
}
});
ここではquerySetup図である:
<select name="brand" ng-model = "pickedCountry"
data-ng-options="country as country.name for country in currentCountries">
<option value="">Select Brand</option>
</select>
コントローラをstate homepage
の外に移動し、state homepage.show
の下の各ビューに設定しました。これは正常に機能しましたが、余分な操作は機能しません。ブランドを選択するときは、計算を実行してqueryResults
ビューに設定する必要があります。結果はスコープに設定され、queryResults
に表示する必要があります。ここ
はqueryResultsです:
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">OSM RESULTS</h3>
</div>
<div class="panel-body">
<textarea rows="50" cols="100" class="xmlOutput">
{{ queryResults }}
</textarea>
</div>
</div>
助けてください! Angular $ watchに慣れていないと、2つのUIビューがあるときに問題が発生すると思います。あなたの助けを前にありがとう。
UPDATE
は私の問題への解決策を見つけたので、私は私のモデルに$parent
を追加して、私の$watch
関数へのparamとして変更されたデータを渡す必要があります。
のhtml更新:
<select name="brand" ng-model = "$parent.pickedCountry"
data-ng-options="country as country.name for country in currentCountries">
<option value="">Select Brand</option>
</select>
コントローラ更新
$scope.$watch('pickedCountry', function(data){
if(data != null){
$scope.countryCode = data.code;
}
});
これで問題は解決しましたが、どうして私が親を追加する必要があるのかは分かりません。なぜ誰かが説明できますか?
私は構造をお勧めしなかった、と '$のparent'を取り出し、そして' $時計は動作していません。 '$ parent'を離れる必要があるのですか、' '$ watch''を使って別のことをする必要がありますか? URLは '/ homepage'には設定されていませんでしたが、'/'にする必要があります。それとも '/ homepage 'でなければならないのですか? – medev21
それは私がそれが思ったように動作しません。各ui-viewは、兄弟スコープの変数にアクセスできない子スコープを作成します。それはコミュニケーションの面で2つの選択肢を残します。 1. $ scope。$ broadcast/$ scope。$ onを使用してイベントをブロードキャストし、それを聞くことができます。2.通信にサービスを使用できます。3. $ parentを使用できます。 $ parentを使用することに決めた場合、ng-modelがすでに暗黙的に時計を追加しているので、時計を作成しないことをお勧めします。代わりにng-model = $ parent.pickedCountryを設定し、結果に{{pickedCountry}}と表示します –