Javascript 来自内部指令的angularjs绑定值更改不会反映在外部

Javascript 来自内部指令的angularjs绑定值更改不会反映在外部,javascript,angularjs,Javascript,Angularjs,我正在测试内部指令中绑定变量的行为,但似乎无法刷新视图。模型正在根据控制台日志进行更新,我调用$appy(),但由于某些原因,视图拒绝更新。这是我的名字 这是html <div ng-app="foo"> <div ng-controller="MyCtrl"> <div my-directive val="val" checked="checked" refresh="refresh"></div> <

我正在测试内部指令中绑定变量的行为,但似乎无法刷新视图。模型正在根据控制台日志进行更新,我调用$appy(),但由于某些原因,视图拒绝更新。这是我的名字

这是html

<div ng-app="foo">
    <div ng-controller="MyCtrl">
        <div my-directive val="val" checked="checked" refresh="refresh"></div>
        <p>val (outside directive): {{val}}<p/>        
        <p>checked (outside directive): {{checked}}<p/>        
    </div>
</div>

val(外部指令):{{val}}

选中(外部指令):{{checked}}

下面是javascript

angular.module('foo', []).directive('myDirective', function() {
    return {
        restrict: 'A',
        scope: {
            val: "=",
            checked: "=",
            refresh: "="
        },
        template: '<p>val (inside directive): {{val}}</p>' +
                    '<p>checked (inside directive): {{checked}}</p>' +
                    '<input type="checkbox" ng-model="checked">checked',
        link: function(scope, element, attrs) {
            var count = 0;
            //scope.val = "initialized";            
            scope.$watch('checked', function() {
                scope.val = "new value" + count;
                count += 1;
                console.log("updated val is: " + scope.val);
                scope.refresh();
            });
        } // link
    }; // return
}); // angular.module

function MyCtrl($scope) {
    $scope.val = "initial value";
    $scope.checked = false;   
    $scope.$watch('val', function(newVal) {
        console.log("newVal is: " + newVal);
    });
    $scope.refresh = function() {
        // none of the following lines make a difference
        if(!$scope.$$phase) $scope.$apply();
        // $scope.$apply();
        // if(!$scope.$$phase) $scope.$digest();
        // $scope.$digest();        
        console.log("val is: " + $scope.val);
        console.log("checked is: " + $scope.checked);        
    }; // refresh    
} // MyCtrl
angular.module('foo',[]).directive('myDirective',function(){
返回{
限制:“A”,
范围:{
val:“=”,
选中:“=”,
刷新:“=”
},
模板:'val(内部指令):{{val}

'+ “已检查(内部指令):{{checked}

”+ “选中”, 链接:函数(范围、元素、属性){ var计数=0; //scope.val=“已初始化”; 作用域:$watch('已选中',函数(){ scope.val=“新值”+计数; 计数+=1; 日志(“更新的val为:“+scope.val”); scope.refresh(); }); }//链接 };//返回 }); // 角模 函数MyCtrl($scope){ $scope.val=“初始值”; $scope.checked=false; $scope.$watch('val',函数(newVal){ log(“newVal是:”+newVal); }); $scope.refresh=函数(){ //以下几行都没有区别 如果(!$scope.$$phase)$scope.$apply(); //$scope.$apply(); //如果(!$scope.$$phase)$scope.$digest(); //$scope.$digest(); log(“val是:”+$scope.val); log(“选中的是:“+$scope.checked”); };//刷新 }//MyCtrl
如果您只需将小提琴中angularjs的版本从1.1.1更改为1.2.1,那么它就可以工作。

如果您只需将小提琴中angularjs的版本从1.1.1更改为1.2.1,那么它就可以工作。

您使用的angularjs的哪个版本似乎是小提琴问题请查看正在使用的angular js的工作文件副本做一个小提琴手看看工作的plunker拷贝