DBからレコードを読み込んでカレンダーに出力する次のコントローラをAngularで用意しました。問題は、イベント配列が空の状態に戻ってしまうことです。代替として$ rootScope.eventsを使用しようとしましたが、 "concatは未定義の関数ではありません"というエラーが返されます。私は間違って何をしていますか?ネストされたスコープのトリックがありますか?ネストされたコールバックスコープとrootScope AngularJS
また、innerActivity変数が内部コールバックでも定義されていないこともわかりました。私はこれが私が欠けている一般的な知識の一部だと考えています。いくつかの事はここで起こっ
app.controller('Calendar', ['$scope','$rootScope','$resource','moment', function($scope, $rootScope, $resource ,moment) {
var Activities = $resource('/api/activities');
Activities.query(function(activities){
$rootScope.activities = activities;
//console.log($rootScope.activities);
});
//console.log($rootScope.activities);
var vm = this;
var events = [];
//define the calendar on rootScope, so it has access to the Events data from the other controllers
$rootScope.calendar = new moment();
angular.forEach($rootScope.activities, function(eachActivity){
//console.log(eachActivity.events);
if (eachActivity.events.length > 0){
angular.forEach(eachActivity.events, function(eachEvent, eachActivity){
console.log(eachEvent);
var entry = {
title: eachActivity.title,
type: "warning",
startsAt: eachEvent.startDate,
endsAt: eachEvent.endDate,
incrementBadgeTotal: true
}
events.concat(entry);
});
}
});
vm.events = events;
console.log(vm.events);
vm.calendarView = 'month';
vm.viewDate = moment().startOf('month').toDate();
vm.isCellOpen = true;
}]);
すぐに解決していただきありがとうございます。つまり、外側のスコープで何かが定義されていれば、内側のスコープに自動的にアクセスできるということですか?これは多くの入れ子スコープに当てはまりますか?これはJavascriptやAngularJSに特有のものですか? – MadPhysicist
あなたのアーキテクチャ上のコメントに関しては、私のコードは現時点ではかなり分かりませんが、私はまだAngularを学んでいます。どのように情報をサービスに提出しますか? $ scope.variableをパラメータとして使用しますか? – MadPhysicist
HI、最初の質問に答えてください。変数が外側のループに定義されている場合は、明示的に再割り当て/割り当て解除されずに "渡される"必要がない限り、内部ループのスコープ内に残ります。これは、Javascriptを含むすべてのCベースのプログラミング言語に適用されます。あなたの2番目の質問については、私はいくつかのヒントを含むように私の答えを編集します。 –