AngularJS:通过($ emit或$ broadcast)从指令向控制器抛出一个事件,它无法更新绑定到html的值

时间:2014-07-23 14:41:55

标签: angularjs

我试图从我的指令中抛出一个事件,即

link: function (scope, elem, attrs) {
    elem.on('blur', function () {
        $rootScope.$broadcast("emit:dateTimePicker", {
                    location: scope.location,
                    action: 'changed',
                    dateTime: scope.dateTime
        });
    });
}

然而,当它在控制器中出现时

$scope.$on('$broadcast:dateTimePicker', function (e, value) {
    $scope.vm.dateTime = value.dateTime;
    $scope.vm.message = "Change!";
    console.log($scope.vm.dateTime);
});

控制台写出更改的值,但绑定到html元素的值不会。我究竟做错了什么。对不起,如果这个问题措辞不正确 - 任何提示/帮助将不胜感激。

这是html <pre >{{vm}}</pre>

2 个答案:

答案 0 :(得分:0)

尝试在$scope.apply()块中添加事件处理程序,如下:

link: function (scope, elem, attrs) {
    elem.on('blur', function () {
        scope.$apply(function() {
            $rootScope.$emit("emit:dateTimePicker", ...);
        });
    });
}

答案 1 :(得分:0)

添加范围。$ apply();在$ rootScope之后。$ broadbast(&#34; emit:dateTimePicker&#34;,{})