Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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
Javascript 在指令中使用ng模型和ng重复_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 在指令中使用ng模型和ng重复

Javascript 在指令中使用ng模型和ng重复,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,所以我似乎不太明白这一点。基本上,我正在构建一个包含选项的指令,我想在指令中定义这些选项,但在控制器中定义默认选项。它似乎渲染良好,但未选择默认选项。有什么提示吗?这是你的电话号码 angular.module('app',[]) .controller('Ctrl',函数($scope){ $scope.defaultSearchRange=3; }) .directive('dateRange',function(){ 返回{ 限制:“A”, 范围:{ 搜索范围:'=' }, 替换:正确,

所以我似乎不太明白这一点。基本上,我正在构建一个包含选项的指令,我想在指令中定义这些选项,但在控制器中定义默认选项。它似乎渲染良好,但未选择默认选项。有什么提示吗?这是你的电话号码

angular.module('app',[])
.controller('Ctrl',函数($scope){
$scope.defaultSearchRange=3;
})
.directive('dateRange',function(){
返回{
限制:“A”,
范围:{
搜索范围:'='
},
替换:正确,
模板:“{option.name}}”,
控制器:功能($scope){
$scope.options=[
{名称:'',值:0},
{name:'Today',值:1},
{name:'昨天',值:2},
{name:'Last 7 Days',值:3},
{name:'Last 30 Days',值:4},
{name:'Month-to-Date',值:5},
{name:'Year-to-Date',值:6}
]
}
}
})

您无法设置默认值,因为默认情况下,
ng repeat
不会考虑
ng model

这是有效的

我建议使用
ng选项
而不是
ng重复
track by
变体将允许您设置所选值。但它必须采用相同的“对象格式”才能工作

以下是修改后的代码:

angular.module('app', [])
  .controller('Ctrl', function ($scope) {
    $scope.defaultSearchRange = 3;
  })
  .directive('dateRange', function () {
    return {
      restrict: 'A',
      scope: {
        searchRange: '='
      },
      replace: true,
      template: '<div><select ng-model="selected" ng-options="o.name for o in options track by o.value"></select></div>',
      link: function (scope) {

        scope.selected = { value: scope.searchRange };

        scope.$watch('selected', function(selected) {

          scope.searchRange = selected.value;
        });

        scope.options = [
            { name: '',             value: 0 },
            { name: 'Today',        value: 1 },
            { name: 'Yesterday',    value: 2 },
            { name: 'Last 7 Days',  value: 3 },
            { name: 'Last 30 Days', value: 4 },
            { name: 'Month to Date',value: 5 },
            { name: 'Year to Date', value: 6 }
        ];
      }
    }
  })
angular.module('app',[])
.controller('Ctrl',函数($scope){
$scope.defaultSearchRange=3;
})
.directive('dateRange',function(){
返回{
限制:“A”,
范围:{
搜索范围:'='
},
替换:正确,
模板:“”,
链接:功能(范围){
scope.selected={value:scope.searchRange};
范围.$watch('选定'),功能(选定){
scope.searchRange=selected.value;
});
scope.options=[
{名称:'',值:0},
{name:'Today',值:1},
{name:'昨天',值:2},
{name:'Last 7 Days',值:3},
{name:'Last 30 Days',值:4},
{name:'Month-to-Date',值:5},
{name:'Year-to-Date',值:6}
];
}
}
})

注意:上面的代码映射到一个新的指令作用域属性
selected
。如果控制器希望传递一个对象而不是一个数字值,则不需要这样做。由于值已映射入,我们必须
$watch
,然后将实际选择的值映射回。

您无法设置默认值,因为默认情况下
ng repeat
将不考虑
ng model

这是有效的

我建议使用
ng选项
而不是
ng重复
track by
变体将允许您设置所选值。但它必须采用相同的“对象格式”才能工作

以下是修改后的代码:

angular.module('app', [])
  .controller('Ctrl', function ($scope) {
    $scope.defaultSearchRange = 3;
  })
  .directive('dateRange', function () {
    return {
      restrict: 'A',
      scope: {
        searchRange: '='
      },
      replace: true,
      template: '<div><select ng-model="selected" ng-options="o.name for o in options track by o.value"></select></div>',
      link: function (scope) {

        scope.selected = { value: scope.searchRange };

        scope.$watch('selected', function(selected) {

          scope.searchRange = selected.value;
        });

        scope.options = [
            { name: '',             value: 0 },
            { name: 'Today',        value: 1 },
            { name: 'Yesterday',    value: 2 },
            { name: 'Last 7 Days',  value: 3 },
            { name: 'Last 30 Days', value: 4 },
            { name: 'Month to Date',value: 5 },
            { name: 'Year to Date', value: 6 }
        ];
      }
    }
  })
angular.module('app',[])
.controller('Ctrl',函数($scope){
$scope.defaultSearchRange=3;
})
.directive('dateRange',function(){
返回{
限制:“A”,
范围:{
搜索范围:'='
},
替换:正确,
模板:“”,
链接:功能(范围){
scope.selected={value:scope.searchRange};
范围.$watch('选定'),功能(选定){
scope.searchRange=selected.value;
});
scope.options=[
{名称:'',值:0},
{name:'Today',值:1},
{name:'昨天',值:2},
{name:'Last 7 Days',值:3},
{name:'Last 30 Days',值:4},
{name:'Month-to-Date',值:5},
{name:'Year-to-Date',值:6}
];
}
}
})

注意:上面的代码映射到一个新的指令作用域属性
selected
。如果控制器希望传递一个对象而不是一个数字值,则不需要这样做。由于值已映射入,我们必须
$watch
,然后将实际选择的值映射回。

您无法设置默认值,因为默认情况下
ng repeat
将不考虑
ng model

这是有效的

我建议使用
ng选项
而不是
ng重复
track by
变体将允许您设置所选值。但它必须采用相同的“对象格式”才能工作

以下是修改后的代码:

angular.module('app', [])
  .controller('Ctrl', function ($scope) {
    $scope.defaultSearchRange = 3;
  })
  .directive('dateRange', function () {
    return {
      restrict: 'A',
      scope: {
        searchRange: '='
      },
      replace: true,
      template: '<div><select ng-model="selected" ng-options="o.name for o in options track by o.value"></select></div>',
      link: function (scope) {

        scope.selected = { value: scope.searchRange };

        scope.$watch('selected', function(selected) {

          scope.searchRange = selected.value;
        });

        scope.options = [
            { name: '',             value: 0 },
            { name: 'Today',        value: 1 },
            { name: 'Yesterday',    value: 2 },
            { name: 'Last 7 Days',  value: 3 },
            { name: 'Last 30 Days', value: 4 },
            { name: 'Month to Date',value: 5 },
            { name: 'Year to Date', value: 6 }
        ];
      }
    }
  })
angular.module('app',[])
.controller('Ctrl',函数($scope){
$scope.defaultSearchRange=3;
})
.directive('dateRange',function(){
返回{
限制:“A”,
范围:{
搜索范围:'='
},
替换:正确,
模板:“”,
链接:功能(范围){
scope.selected={value:scope.searchRange};
范围.$watch('选定'),功能(选定){
scope.searchRange=selected.value;
});
scope.options=[
{名称:'',值:0},
{name:'Today',值:1},
{name:'昨天',值:2},
{name:'Last 7 Days',值:3},
{name:'Last 30 Days',值:4},
{name:'Month-to-Date',值:5},
{name:'Year-to-Date',值:6}
];
}
}
})

注意:上面的代码映射到一个新的指令作用域属性
selected
。如果控制器希望传递一个对象而不是一个数字值,则不需要这样做。由于值已映射入,我们必须
$watch
,然后将实际选择的值映射回。

您无法设置默认值,因为默认情况下
ng repeat