Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 隔离作用域可以将对象传递给其主控制器_Angularjs_Angular Directive - Fatal编程技术网

Angularjs 隔离作用域可以将对象传递给其主控制器

Angularjs 隔离作用域可以将对象传递给其主控制器,angularjs,angular-directive,Angularjs,Angular Directive,我想创建一个指令,其中包含可以选择的周天数(单击) 并使用新的“周”(新周对象中的选定日期)更新根范围 当您单击“添加”按钮时,第一行上所选的日期将被删除,新记录将添加到换档列表的顶部。 我创建了JSFIDLE: 我的问题是,我在new指令(weekDays)中创建了一个新的作用域,该指令假设将week对象(使用选定的日期)移动到其根作用域方法,但调用该方法时week为null 工作日指令: app.directive("weekDays", function(){ return{

我想创建一个指令,其中包含可以选择的周天数(单击) 并使用新的“周”(新周对象中的选定日期)更新根范围

当您单击“添加”按钮时,第一行上所选的日期将被删除,新记录将添加到换档列表的顶部。 我创建了JSFIDLE:

我的问题是,我在new指令(weekDays)中创建了一个新的作用域,该指令假设将week对象(使用选定的日期)移动到其根作用域方法,但调用该方法时week为null

工作日指令:

app.directive("weekDays", function(){
  return{
    restrict: "AEC",
     scope: {
      shiftPatterns: '=',
      action: '&'
    },
    controller: function($scope, $element) {
       $scope.week = [{"name":"MON", "selected":false}  , {"name":"TUE", "selected":false}  , {"name":"WED", "selected":false}  , {"name":"THU", "selected":false} , {"name":"FRI", "selected":false}  , {"name":"SAT", "selected":false}  , {"name":"SUN", "selected":false} ];
       $scope.AddOrRemoveDay = function(day){
          day.selected = !day.selected
      };

    },
    template: "<div style='width:500px; display:inline'>"+
                "<div ng-repeat='day in week' ng-class=\"{true:'possibleDayStyle', false:'notPossibleDay'}[day.selected]\" ng-click='AddOrRemoveDay(day)'>"+
                    "{{day.name}}</div>"+
                "</div>"+
                "<button class='btnAddPossibleDays' ng-click='action(week)'>Add</button>"
  }
});



app.controller('MyCtrl', function ($scope) {
  $scope.shiftPatterns = [];
  $scope.name="or";
  shiftPatternObj = function(week){
    this.title = $scope.title;
    this.minDays = $scope.minDays;
    this.maxDays = $scope.maxDays;
    this.selectedDays =  angular.copy(week);
    //this.selectedDays =  angular.copy($scope.week);
  }

  $scope.AddShift = function(week){
    var objShift = new shiftPatternObj();
    $scope.shiftPatterns.push(objShift);

    $scope.cleanShiftValues();
  }

  $scope.cleanShiftValues = function(){


    this.title = "";
    this.minDays = 0;
    this.maxDays = 0;
  }

});
app.directive(“工作日”,函数(){
返回{
限制:“AEC”,
范围:{
移位模式:“=”,
行动:'&'
},
控制器:函数($scope$element){
$scope.week=[{“name”:“MON”,“selected”:false},{“name”:“TUE”,“selected”:false},{“name”:“WED”,“selected”:false},{“name”:“THU”,“selected”:false},{“name”:“selected”:false},{“name”:“SUN”,“selected”:false},{“name”:“selected”:false}];
$scope.AddOrRemoveDay=函数(天){
day.selected=!day.selected
};
},
模板:“”+
""+
“{day.name}}”+
""+
“添加”
}
});
应用程序控制器('MyCtrl',函数($scope){
$scope.shiftPatterns=[];
$scope.name=“或”;
shiftPatternObj=功能(周){
this.title=$scope.title;
this.minDays=$scope.minDays;
this.maxDays=$scope.maxDays;
this.selectedDays=angular.copy(周);
//this.selectedDays=angular.copy($scope.week);
}
$scope.AddShift=函数(周){
var objShift=新的移位模式nobj();
$scope.shiftPatterns.push(objShift);
$scope.cleanShiftValues();
}
$scope.cleanShiftValues=函数(){
this.title=“”;
此值为0.minDays=0;
此值为0.maxDays=0;
}
});

HTML:

<week-days action="AddShift(week)" ...

你是不是忘了在
AddShift
函数中将
week
传递到
new shiftPatternObj()
中?我没有忘记你可以看到我的代码是不是应该是
new shiftPatternObj(week)
而不是
new shiftPatternObj()
?这对你有用吗?我可以更改周值吗?我的意思是它是通过值传递还是通过引用?我想更改周值使用
更改周值是什么意思?这是一个数组。是否要传递另一个数组?JavaScript中没有可用的“按引用传递”。对对象的引用按值传递。如果你觉得这让人困惑的话,有很多信息可以提供(如果你这么做了,你不应该感到不安)。
... ng-click='action({ week: week })' ...