如何将范围中的变量注入Angular控制器?

时间:2016-03-02 08:47:38

标签: javascript angularjs

index.html 中,我正在执行以下操作:

<div ng-controller="MyController">
    <div ng-model="pk" ng-init="pk='2'"></div>
</div>

无论如何,在我的 angular 文件中,我正在做这样的事情:

.controller('MyController', [
  '$scope', function($scope) {
    alert('Sup ' + $scope.pk);
  }
])

因此,假设URL的pk为2,我希望看到类似的内容:

  

Sup 2

但是,我的输出是:

  

Sup undefined

我做错了什么?谢谢!

4 个答案:

答案 0 :(得分:2)

这种情况发生了,因为来自控制器的代码在来自视图的代码之前执行,因此在运行时

alert('Sup ' + $scope.pk);

ng-init - 不执行。

因此,对于解决方案,您可以在控制器内部简单地分配值,或者使用其他答案中的解决方案,例如watchtimeout

答案 1 :(得分:1)

使用$timeout延迟提醒:

.controller('myCtrl', [
  '$scope', '$timeout', function($scope, $timeout) {
    $timeout(function() 
      alert('Sup ' + $scope.pk);
    });
  }
]);

答案 2 :(得分:1)

使用$scope.$watch

.controller('MyController', ['$scope', function($scope) {
    $scope.$watch('pk', function(newValue, oldValue) {
        alert('Sup ' + newValue);
    });
}]);

在视图初始化之前调用alert('Sup ' + $scope.pk);,因此在调用ng-init之前调用。{/ p>

答案 3 :(得分:1)

Angular有一个应该始终遵循的技巧:“始终在模型中使用点”。 例如:

<?php while($row=mysql_fetch_array($query)) { $id=$row['poster_id']; $id2=$row['commenter_id']; echo '<div style="float:left"><a href="user.php?id='.$id.'"><img src="'.htmlentities($row["poster_photo"], ENT_QUOTES, 'UTF-8').'"></a>'; if ($comment !== 'NULL') { echo '<div style="float:left"><a href="user.php?id='.$id2.'"><img src="'.htmlentities($row["commenter_photo"], ENT_QUOTES, 'UTF-8').'"></a>'; } else { echo 'Nothing to show'; } echo '</div>'; echo '</div>' ; echo '</br>' ; } ?>

this answer中查看更多内容。

您还应该考虑使用一些可以防止出现此类问题的guidelines from John Papa,请参阅here一个示例。 试一试,告诉我它是怎么回事。