0

我有一个指令,我想更改该指令给出的 ng-model 值...我正在设置scope: {ngModel: '='}并且我正在更改我的指令中的 ngModel 值(点击事件),但我看不到我的更改外部/原始对象

这个plunker显示了问题......

4

1 回答 1

3

这里有一些错误,都是常见的错误。

  1. 通过 jQuery using 注册的事件处理程序$(...).on(...)将在 Angular 上下文之外执行,因此 Angular 将不知道事情何时更新。要解决这个问题,您必须将内容包装在scope.$apply这样的调用中

    $('#aaa').on('click', function() {
        _scope.$apply(function(){
            _scope.ngModel = 'Other Value';
            updateTemplate();
        });
    });
    

    这将使用 更新与输入的绑定ng-model。事实上,您可以通过使用ng-click指令来避免这样做。

  2. 使用 Angular,您无需使用.html(...). 绑定是该框架的主要功能之一。您可以通过在其中放置一个表达式来使用插值,而不是使用更新功能,{{ ... }}并且您的 DOM 将在您的模型更新时更新。例如,在定义指令时,您可以使用

    template: '<div id="aaa">{{ngModel}}</div>'
    

    设置您的模板{{ngModel}}并将显示ngModel.

  3. ngModel不只是任何属性,它是一个强大的指令。如果您需要自己的指令来声明当前模型有效或无效,或者与表单交互,那么您应该通过require控制器上的属性使用它(参见此处)。

    如果您不需要这些功能,那么您应该将您的属性称为不同的东西以避免冲突。

我已经更新了plunker以包括这些点。

于 2013-10-16T23:53:44.620 回答