Javascript 脚本内的角度范围

Javascript 脚本内的角度范围,javascript,angularjs,javascript-framework,Javascript,Angularjs,Javascript Framework,我们可以像下面这样使用脚本标记内范围中定义的角度变量吗 HTML代码: <div ng-controller="AngularCtrl"> <script> alert($scope.user_name); </script> </div> 我只得到“$scope未定义”。有人能帮我解决我这里做错了什么吗?不,你不能$scope仅在Angular内部定义,即在AngularCtrl-函数中定义。有几种方法可以从外部访问角度示波器,但这通常

我们可以像下面这样使用脚本标记内范围中定义的角度变量吗

HTML代码:

<div ng-controller="AngularCtrl">
 <script>
  alert($scope.user_name);
 </script>
</div>

我只得到“$scope未定义”。有人能帮我解决我这里做错了什么吗?

不,你不能
$scope
仅在Angular内部定义,即在
AngularCtrl
-函数中定义。有几种方法可以从外部访问角度示波器,但这通常是一种不好的做法,表明您没有正确使用角度示波器

一种更具角度感的方法是将警报作为控制器逻辑的一部分:

function AngularCtrl($scope) {

    $scope.user_name = 'John';

    $scope.sayHi = function(){
        alert('Hi ' + $scope.user_name);
    }
}
然后可以使用各种角度技术()调用该函数。一些例子:

作为对点击的回应
希望这些例子很有启发性,但你真正应该做什么取决于你真正想要完成什么。

非常感谢,谢谢!我这里的问题是,当加载页面时,我有一个不存在的DOM。DOM仅在单击特定操作时加载。但问题是DOM中的角度代码没有编译。那么,在加载DOM时,有没有方法进行$compile(jQuery(“DOM#u ID”))呢?再次感谢!是的,不过您可能应该为它创建一个指令。请参阅和。注意,作用域应用于编译的返回值,实际上是
var compiled=$compile(element.contents());汇编($范围)。请注意,在Angular中已经有一个可以做您想要做的事情。这里的示例响应下拉列表中的更改,尽管您可以轻松地调整它以响应单击事件。如何在init上访问调用该函数的元素?有一个
这个
?@Andy,我不知道,严格来说你不应该这样。控制器不应该处理DOM/元素。如果您需要与元素交互,那么这表明您实际上需要制定一个合适的指令。这也将使它更容易重用。
function AngularCtrl($scope) {

    $scope.user_name = 'John';

    $scope.sayHi = function(){
        alert('Hi ' + $scope.user_name);
    }
}
<div ng-click="sayHi()">Demo clickable - Please click me</div>
<div ng-init="sayHi()">Demo ng-init</div>
function AngularCtrl($scope) {

    $scope.user_name = 'John';

    $scope.sayHi = function(){
        alert('Hi ' + $scope.user_name);
    }

    // Call it
    $scope.sayHi();
}