0

我有一个 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 调用,这也产生了预期的效果

所以,我被难住了,我该怎么办?让我知道需要更多信息。

谢谢。

4

0 回答 0