Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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_Directive - Fatal编程技术网

双向数据绑定无法从指令链接函数angularjs工作

双向数据绑定无法从指令链接函数angularjs工作,angularjs,directive,Angularjs,Directive,我试图在指令视图html中使用指令'link:function'中声明的变量 我尝试使用的变量是int from对象,这个对象被声明为$scope变量slider 我正在尝试显示它: <div> {{ slider.step }} </div> 如果步骤===2,我将改变步骤 基本上,这是正确的工作垂直滑块。唯一缺少的是,我无法从视图访问当前步骤,也无法显示当前选定幻灯片的正确活动点。这就是为什么我需要看到这个步骤int,但我不能 是plnkr演示。您必须使用$

我试图在指令视图html中使用指令'link:function'中声明的变量

我尝试使用的变量是int from对象,这个对象被声明为$scope变量slider

我正在尝试显示它:

<div>
    {{ slider.step }}
</div>
如果步骤===2,我将改变步骤

基本上,这是正确的工作垂直滑块。唯一缺少的是,我无法从视图访问当前步骤,也无法显示当前选定幻灯片的正确活动点。这就是为什么我需要看到这个步骤int,但我不能

是plnkr演示。

您必须使用$timeoutfunction{$scope.$apply;};数据更改后

工作示例

角度。模块'plunker',[]; 函数MainCtrl$scope{ $scope.hello='World'; } 角度。模块'plunker'。指令'elements',函数$timeout{ 返回{ 限制:'E', 范围:{ 名称:'=' }, 模板:` {{滑块}} `, 链接:函数$scope,el{ $scope.slider={ 步骤:1, 更改幻灯片:功能步骤{ 控制台日志11,步骤 如果步骤===1{ 这个步骤=1; console.log“将步骤更改为1:”+$scope.slider.step; } 如果步骤===2{ 这个步骤=2; console.log“将步骤更改为2:”+$scope.slider.step; } $timeoutfunction{$scope.$apply;}; } } var i=1; $timeoutfunction{ $scope.slider.changeSlidei; 设置间隔函数{ i++; 如果i==3,则i=1; $scope.slider.changeSlidei; }, 5000; }; } }; }; 安古拉斯普朗克 文件。书写;
在更改其值的位置添加一些console.log。也许是你搞错了!我在this.step=2之后添加了console.log,它执行了console 2,但没有在html模板中重新加载。它显示1,不想改变,我做错了什么,你能提供一个有效的plunker或codepen示例吗?是的,当然。干得好。我并没有使用来自原始源代码的代码,但我创建了这个问题的最小示例。启动此脚本时,请查看控制台。它在JS代码中发生了变化,但在模板中并没有重新命名,这就是为什么这个问题的标题是双向数据绑定不起作用:是的,但为什么我必须使用它是奇怪的,而且@BT101I现在在初始化函数时出错,不是在间隔内,而是通过ng单击错误:[$rootScope:inprog]$apply已在进行中,因此您的问题现在已更改为其他问题。搜索这个新的。我也会搜索@BT101,让我们一起搜索。
link: function($scope, el) {
  $scope.slider = {
    step: 1,
    changeSlide: function (step) {
      if(step === 1) {
        this.step = 1;
        console.log('changed step to 1: ' + $scope.slider.step);
      }
      if(step === 2) {
        this.step = 2;
        console.log('changed step to 2: ' + $scope.slider.step);
      }
    }
  }
  $timeout(function () {
    var i = 1;
    $scope.slider.changeSlide(i);
    setInterval(function () {
        i++; if(i === 3) i = 1;
        $scope.slider.changeSlide(i);
    }, 5000);
  });
}