模型更新前的指令触发控制器

时间:2014-11-03 17:59:54

标签: angularjs angularjs-directive

我创建了一个创建两个按钮的自定义指令。每个按钮使用ng-click调用指令内的方法来更改模型的值,然后调用控制器来更新数据库中的值。通过这种方式,在更新模型之前调用控制器,因为它始终使用旧值。 如果我在指令$ scope内部应用。$ apply()一切正常,除非在consolle中触发错误,因为还有$ apply()执行。如何正确等待模型更新才能调用控制器?

该指令用于迭代数组的ng-repeat。

我使用的逻辑是:

  1. 用户单击开关按钮之一(开或关等)
  2. 按钮触发器指令setModel(value)方法
  3. setModel(value)设置值为模型并调用控制器传递对象的索引
  4. controller通过索引获取对象并在数据库中更新
  5. 如果我尝试将编辑的值发送到控制器,当然它可以工作,但我会使用模型而不是每个值。为什么在控制器执行$ http调用之前更新模型?

    这是指令:

    app.directive('ngSwitch', function () {
    return {
        scope: {
            model: '=ngSwitch',
            index: '=index', //Index in the array
            switchValue1: '@switchValue1',
            switchDesc1: '@switchDesc1',
            switchValue2: '@switchValue2',
            switchDesc2: '@switchDesc2',
            callback: '=callback'
        },
        link: function (scope, elm, attr) {
            scope.saving = false;
            scope.setModel = function (value) {
    
                scope.model = value == 1 ? scope.switchValue1 : scope.switchValue2;
                scope.saving = true;
                scope.$apply();//IF I DON'T USE $apply, IT DOESN'T WORK
                scope.callback(scope.index)
    
            }
        },
        templateUrl: 'components/direttive/ngSwitch.html'
    };
    

    });

0 个答案:

没有答案