angularJS$watch在使用控制器更新数据时不在指令中工作
angularJS $watch do not work in directive when use controller to update data
我有一个自定义指令,还有一个控制器将数据绑定到指令。
我从服务器部分获取数据,并将其绑定到指令。然而,当我更改范围变量时,我发现页面上指令的数据没有更新
这是我的代码
指令:
angular.module('MyApp')
.directive('stats',function() {
return {
templateUrl:'scripts/directives/dashboard/stats/stats.html',
restrict:'E',
replace:true,
scope: {
'comments': '@',
'number': '@',
'name': '@',
'colour': '@',
'details':'@',
'type':'@',
'goto':'@'
},
link : function($scope,element,attr){
$scope.$watch('number', function(oldValue,newValue) {
console.log(attr);
}, true);
}
}
});
指令模板:
<div class="col-lg-3 col-md-6">
<div class="panel panel-{{colour}}">
<div class="panel-heading">
<div class="row">
<div class="col-xs-3">
<i class="fa fa-{{type}} fa-5x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge">{{number}}</div>
<div>{{comments}}</div>
</div>
</div>
</div>
<a href="{{goto}}">
<div class="panel-footer">
<span class="pull-left">查看详情</span>
<span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span>
<div class="clearfix"></div>
</div>
</a>
</div>
控制器:
'use strict';
angular.module('MyApp',['ngResource'])
.controller('MainCtrl', function($scope,$state,MyService) {
$scope.result = {};
var names = MyService.get({classtype:'getNames',start:'',end:''},function(){
$scope.pages = names.data;
if (typeof($scope.pages[0]) === 'undefined'){
$scope.selectedItem = 'loading...';
}else{
$scope.selectedItem = $scope.pages[0].name;
}
var res = MyService.get({classtype:'getLastRes',seriesName:$scope.selectedItem},function(){
$scope.result = res;
});
});
$scope.dropboxitemselected = function(item){
$scope.selectedItem = item;
var result = MyService.get({classtype:'getLastRes',seriesName:item},function(){
$scope.result = result;
});
//$scope.result = {};
};
});
HTML:
<div class="row" ng-controller="MainCtrl">
<stats number="{{result.score}}" comments="score" colour="primary" type="heartbeat" goto="#/res/{{result._id}}"></stats>
<stats number="{{result.totalSize}}" comments="size" colour="primary" type="file-code-o" goto="#/res/{{result._id}}"></stats>
<stats number="{{result.count}}" comments="count" colour="red" type="file-text" goto="#/res/{{result._id}}"></stats>
</div>
我的页面上有一个下拉框,当我通过控制器中的函数dropboxitemselected
更改项目时,我需要刷新指令中的数据,我该怎么办?
我认为这是因为作用域绑定,应该使用'='进行双向绑定,而不是'@'。
scope: {
'number': '=',
},
在HTML中,去掉数字中的括号。
<stats number="result.score" comments="score" colour="primary" type="heartbeat" goto="#/res/{{result._id}}"></stats>
相关文章:
- AngularJs指令,该指令创建内部有数据对象的新指令
- 如何将角度输入指令数据传递给控制器
- 不适用于动态数据的Angular指令来自$http
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- AngularJs 在指令中操作来自服务响应的数据
- 基于范围数据更改指令模板中的元素
- 指令中的数据未在ng重复中显示
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- AngularJS nvd3折线图指令未在数据更改时重新绘制(非实时)
- AngularJS指令数据正在被覆盖
- 单元测试指令-无法强制使用假数据
- 控制器和外部指令之间的双向数据绑定
- AngularJS没有't解析指令中动态加载的数据
- Highcharts数据将不会使用角度指令加载
- 在指令初始化和加载数据后调用函数
- 当我从有界数据派生输出时,为什么我的自定义指令不更新
- 当uib分页被包装在另一个指令中时,AngularJS表数据没有更新
- 动态更新指令数据
- 指令数据有时在广播后不出现
- Angular嵌套指令数据绑定