2016-02-04 62 views
2

好了,所以这里是从angularjs网页样本的Hello World代码:如何在不创建模块的情况下访问AngularJs中的模型变量?

<!doctype html> 
<html ng-app> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script> 
    </head> 
    <body> 
    <div> 
     <label>Name:</label> 
     <input type="text" ng-model="yourName" placeholder="Enter a name here"> 
     <hr> 
     <h1>Hello {{yourName}}!</h1> 
    </div> 
    </body> 
</html> 

现在,必须已经在某处所创建(在某些范围内)这个模型变量yourName,它当然不能使用访问:

<script> 
     console.log(yourName); 
</script> 

我们如何可以访问此变量,而无需创建一个模块,并为其分配一个控制器,然后访问它使用$scope.yourName

不,这是一个要求,但我当然需要它来清除一些概念。

+0

想要不使用控制器访问yourName?是不是它违背了Angularjs基于的MVC模式? –

+0

这当然不是一个好的做法,但假设我们可以做,我们该怎么做。基本上,当我们只使用ng-app指令时,想要了解角色在角色中的工作方式,而不必为其分配模块。 –

+1

这个答案可能也有帮助:http://stackoverflow.com/a/13744085/1362136(这是基本上与奥斯汀的重复源相同的想法) –

回答

0

我知道尝试做你正在做的事情是“邪恶的”,但我一直处于与无法重写的遗留代码类似的情况。从我所收集的内容来看,你想从Angular之外访问一个控制器变量。

因为控制器是一个实例,所以你不能从Angular之外访问它。您需要一种方法将数据从您的内部模型发布到Angular范围之外。一种方法是在该模型上使用手表,当它改变时,将其分配给“窗口”上的变量。要做到这一点,我建议创建一个单独的Angular服务来做实际的发布,所以罪过会更好地包含在那里。

$scope.$watch('yourName', function() { 
    // If you have a Service to do this, you would use: 
    //myPublishService.publish("yourName", $scope.yourName) 
    window.yourName = $scope.yourName; 
}); 
+0

Nah!这里没有涉及控制器。你的答案确实解决了调试范围变量的问题,但那不是我想要的。事实证明,我需要的东西已经在文档中: https://docs.angularjs.org/guide/scope,位于“从DOM中检索范围”部分下。太糟糕了,我没有找到它。 –

相关问题