我有一个 angularjs 'child' 指令,因此:
someAlertMessage: function(){
return {
restrict: 'E',
template: '<span ng-show="showAlert">whatever</span>',
require: '^someInput',
controller: function($scope, AcmeService){
$scope.setShowAlert = function(aValue){
AcmeService.getThings(aValue, function(data){ // bog standard http get with callback
console.log(data) // THIS LOGS true
$scope.showAlert = true; // THIS WORKS
$scope.showAlert = data; // THIS DOESNT WORK
}
}
}
link: function(scope, e, a, c){
scope.$watch('someinputvalue', function(nv, ov){
scope.setShowAlert(nv)
}
}
}
}
以及使用这些指令的页面的标记:
<someInput>
<someAlertMessage></someAlertMessage>
</someInput>
'someInput' 父指令没有太多兴趣。唯一需要注意的是transclude:true
在指令和标记中:
<div>
<!-- things -->
<div ng-transclude></div>
</div>
如第一个清单中所述,我有两种情况:
- 在服务回调中将变量硬编码
$scope.showAlert
为 true 具有完全预期的效果:范围被更新并且 DOM 相应地更改以显示跨度 - 将 $scope 变量设置为从服务返回的值(我知道是
true
,通过日志记录和调试)什么都不做。在这种情况下,如果我将$scope.showAlert
值写到屏幕上,它就会保持为假。
我尝试将服务的返回值硬编码为true
,而不进行 http 调用,这也产生了预期的效果
所以,我被难住了,我该怎么办?让我知道需要更多信息。
谢谢。