我有一条指令$scope.awards
在加载时为空:
.directive('awardNavBar', function () {
// Directive used to display a badge.
return {
restrict: 'E',
scope: {
awards: '='
},
replace: true,
templateUrl: "/static/html/partials/directives/awardNavBar.html",
controller: function ($scope) {
console.log($scope.awards)
}
}
})
但是,当用户点击我的控制器时,会触发一个调用并使用内容更新$ scope.awards:
.controller("awardController", ['$scope', '$rootScope', 'Restangular', "$q", "$location", "TokenRestangular",
function ($scope, $rootScope, Restangular, $q, $location, TokenRestangular) {
$scope.updateAwardScope = function () {
resource = TokenRestangular.all('award');
resource.getList()
.then(function (awards) {
$scope.awards = awards;
})
}
}])
我的问题是指令scope.awards保持空白并且永远不会更新。
有没有办法可以从控制器调用指令并更新它的范围?
我试过了:
$ scope。$ apply()但得到错误:
[$ rootScope:inprog] http://errors.angularjs.org/1.2.19/ $ rootScope / inprog?p0 =%24digest
这是我的HTML:
首先点击事件:
<div ng-controller="awardController">
<div class="btn-group pull-right" >
<div ng-click="toggle('rightSidebar'); updateAwardScope()" class="btn btn-navbar">
<i class="fa fa-comment"></i> Chat
</div>
</div>
然后是我的指示:
<div ng-controller="awardController">
<award-nav-bar awards="awards"></award-nav-bar>
</div>
答案 0 :(得分:2)
对我而言,您似乎没有在awards
中将{{ }}
包裹在HTML绑定中。试试这个:
<award-nav-bar awards="{{ awards }}"></award-nav-bar>
否则,awards
属性将等于字符串"awards"
。
答案 1 :(得分:0)
我知道这是一个老问题,但解决方案不是你得到的,我做了一个指令,隔离范围从一个模型从控制器然后在指令使用矩形从服务器获取文件,我只是尝试更新它使用normal:scope.myDirective = restdata,它在指令上运行良好但不更新控制器中的作用域,我尝试使用$ apply但它抛出一个已经在进行中的错误,然后我最终使用angular.extend和保存我的世界!,因为矩形有一个范围它只更新到第一个父节点,指令控制器,并且主控制器永远不会更新。那是什么angular.extend修复。
如果有帮助,请告诉我