0

我是 Angular 的新手,我期待每当我对模型进行更改时,该更改将通过使用控制器反映在我视图中的数据中。

我有一个工厂来创建我的数据模型

app.factory('日历', function($http){
  return { months : [//月份名称数组 //],
           日历:函数(){
                      // 一堆构建当前月份的东西
                返回日历;
                },
            活动日期:函数(){
                返回 this.calendar()[0];
            }
         }
});

然后在我的控制器中我有

  app.controller('CalendarCtrl',function($scope,Calendar){
       $scope.calendar = 日历.calendar();

       $scope.setActiveDay = 函数(){
           // 当用户点击日历上的日期时,这是由点击事件触发的
           Calendar.activeDay = this.day;
       }
   });

  app.controller('DayCtrl', function($scope,Calendar){
        $scope.activeDay = Calendar.activeDay();
   });

我期望发生的事情是,该setActiveDay方法会改变Calendar.activeDay并且视图将自动填充正确的日期信息。

this.day从 in输出setActiveDay,我可以看到这些值正在正确更新,但DayCtrl没有接受更改。

有人可以向我解释这是为什么吗?是因为 myCalendar.activeDay不是原始类型吗?如果是这样,我该如何解决这个问题?还是完全是别的东西?

4

1 回答 1

2

首先,我认为$scope.activeDay = Calendar.activeDay();应该是

$scope.activeDay = Calendar.activeDay;

现在,让我们来解决您的问题。开头,Calendar.activeDay$scope.activeDay指的是同一个this.day;但是,当您Calendar.activeDay = this.day再次执行时,Calendar.activeDay将更改为指向新的一天,但$scope.activeDay仍然指的是前一天,this.day这就是 DayCtrl 不接受更改的原因。

看起来您正在使用Calendar对象在范围之间进行通信,因此解决问题的一种方法是将Calendar对象附加到每个范围,并Calendar.activeDay在 ngModel 中使用。另一种方法是$scope.$watch在 DayCtrl 中使用:

$scope.$watch(function() {
    return Calendar.activeDay;
}, function(newDay) {
    $scope.activeDay = newDay;
});
于 2013-06-29T06:12:11.783 回答