angularjs – 从内部指令监视控制器模型值

前端之家收集整理的这篇文章主要介绍了angularjs – 从内部指令监视控制器模型值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从一个指令内部角度观察控制器的$ viewValue。

小提琴:http://jsfiddle.net/dkrotts/TfTr5/5/

function foo($scope,$timeout) {
    $scope.bar = "Lorem ipsum";

    $timeout(function() {
        $scope.bar = "Dolor sit amet";
    },2000);
}

myApp.directive('myDirective',function() {
    return {
        restrict: 'A',require: '?ngModel',link: function (scope,element,attrs,controller) {
            scope.$watch(controller.$viewValue,function() {
                console.log("Changed to " + controller.$viewValue);
            });
        }
    } 
});

就这样,$ watch功能没有捕捉到在控制器内部2秒钟之后完成的模型更改。我失踪了什么

$ watch接受在该范围内要观看的属性的“名称”,您要求它观看该值。更改它来观看attrs.ngModel,返回“bar”,现在你正在观看scope.bar。您可以以相同的方式获取该值,或者使用范围[attrs.ngModel],这就是说scope [“bar”]再次与scope.bar相同。
scope.$watch(attrs.ngModel,function(newValue) {
    console.log("Changed to " + newValue);
});

要澄清user271996的注释:scope。使用$ eval是因为可以将对象符号传递到ng-model属性中。即ng-model =“someObj.someProperty”,因为scope [“someObj.someProperty”]无效,因此将无法正常工作。范围。$ eval用于将该字符串评估为实际对象,以便scope [“someObj.someProperty”]变为scope.someObj.someProperty。

猜你在找的Angularjs相关文章