如何在不使用$ watch的情况下更新范围值

时间:2016-03-14 09:30:16

标签: javascript angularjs

我使用自定义指令

<users stats="stats"></users>

当我们从主控制器更改范围对象时,我也有更新指令范围值

app.directive('users', function(){
    var directive = {};
    directive.restrict = "E";
    directive.templateUrl = "templates/partials/users_stats.html";
    directive.scope = {stats:'='};
    directive.controller = "userStatsCtrl"
    return directive;
});

所以,在指令控制器内部,我正在做一些功能。像

app.controller("userStatsCtrl", function($scope){
    $scope.$watch('stats', function(newValue) {
      if (angular.isDefined(newValue)) {
        .....
      }
    });
})

所以在这里,我使用$ watch来监听范围,如果是更新,我会做一些表演。

我的问题是,我不想使用watch来监听范围,如果范围得到更新,我需要做一些表演。

那么如何在不使用范围的情况下更新范围值。$ watch

2 个答案:

答案 0 :(得分:0)

当主控制器中的“scope.stats”值发生变化时,您可以在指令中广播事件并接收相同的事件,并按照您的需要进行操作。 广播事件的示例代码:

SELECT
    flights.name,
    flights.Departure
FROM
    flights
    INNER JOIN Table2
        ON CONCAT(Table2.Dep,Table2.Arri) = CONCAT(SUBSTRING(flights.Departure,1,4),SUBSTRING(flights.Arrival,1,4));

在指令中收到一个事件:

$scope.$broadcast('yourEventName');

答案 1 :(得分:0)

尝试怎么样:

<users stats="stats" ng-change="onUserStatChange($event)"></users> 
                           or
<users stats="stats" ng-blur="onUserStatChange($event)"></users>

然后在控制器中:

$scope.onUserStatChange = function(event) {
    //event.whatever
}