Javascript 来自内部指令的angularjs绑定值更改不会反映在外部
我正在测试内部指令中绑定变量的行为,但似乎无法刷新视图。模型正在根据控制台日志进行更新,我调用$appy(),但由于某些原因,视图拒绝更新。这是我的名字 这是htmlJavascript 来自内部指令的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> <
<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拷贝