Javascript 从指令更新作用域并使用另一个指令监视

Javascript 从指令更新作用域并使用另一个指令监视,javascript,jquery,html,angularjs,angularjs-directive,Javascript,Jquery,Html,Angularjs,Angularjs Directive,问题是: 我尝试这样做: 单击指令会触发一个事件 事件将数据发送到rootScope函数,该函数使用新数据设置范围变量值 另一个指令的模板中有一个ng模型,该模型应该反映先前更改的var 应更新视图和模型中的数据。模型正常(更新完成),但视图更新似乎不会自动触发,它只在我单击“显示按钮”时更新(请参见FIDLE) 下面是我制作的相应JSFIDLE,并附有注释: 这是我认为正在制造麻烦的代码…: app.directive('addEditInput', function() { ret

问题是:

我尝试这样做:

  • 单击指令会触发一个事件
  • 事件将数据发送到rootScope函数,该函数使用新数据设置范围变量值
  • 另一个指令的模板中有一个ng模型,该模型应该反映先前更改的var
  • 应更新视图和模型中的数据。模型正常(更新完成),但视图更新似乎不会自动触发,它只在我单击“显示按钮”时更新(请参见FIDLE)
  • 下面是我制作的相应JSFIDLE,并附有注释:

    这是我认为正在制造麻烦的代码…:

    app.directive('addEditInput', function() {
        return {
            restrict : 'E',
            template : '<div id="editForm"><input type="text" ng-model="currentVar.name" /><br/></div>'
        }
    });
    
    app.directive('addEditInput',function(){
    返回{
    限制:'E',
    模板:“
    ” } });
    事实上,我返回了一个模板,带有ng模型。但是当ng模型的值从其他任何地方更改时,它不会更新

    Tbh,我对指令和作用域通信-数据有点困惑


    感谢阅读/帮助

    简短回答-您需要在top controller中调用
    $scope.$apply

    详细回答:您将通常的js函数绑定到通常的js事件,所以当用户单击元素时,您的函数将执行。就这些。当您使用ng click时,它将触发摘要循环,并且您的绑定将被更新。因此,您需要手动触发它,因此调用
    $scope.$apply


    注意:最好不要在不需要的地方使用jquery。也就是说,使用
    $element.bind('click',function(){
    而不是
    $()。在…

    上,您的理由是正确的,但是最好不要手动绑定单击。该指令使用一个隔离的作用域,因此使用
    设置
    方法完全没有问题,而是使用模板中按钮上的
    ng click
    来设置它,无需手动调用
    $应用
    。如果它继承了作用域,那么扩展它可能会很麻烦,但不是很好。请参阅fiddle:这不起作用。这可能来自我在整个项目中使用的“隔离控制器”,请参阅此详细示例以了解到底发生了什么:单击“视图”在第二列中,您将看到应该显示currentRow数据的div(指令)没有更新!(请注意,它必须双向绑定到globalscope,因为它以后应该通过输入在指令的模板中进行编辑)