对角度js来说是新手。我的问题是,是否可以为不同的页面共享一个控制器。
我有一个网站模板。现在我试图用角度js编码。 我有2个页面,如home.html和new.html
home.html如下所示。
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="kkCtrl">
<p>My first expression: {{ 5 + 5 }}</p>
<a herf="new.html" ng-click="getDatass('w')"> new</a>
</div
</body>
</html>
<script>
var app = angular.module('myApp', []);
app.controller('kkCtrl',["$scope", "$http", function($scope, $http) {
$scope.getDatass= function(a){
$scope.k= a;
}
}])
</script>
我的new.html是
<div ng-controller="kkCtrl">
<table>
<tr><td>kkk</td>
<td>lll</td>
</tr>
</table>
{{k}}
</div>
我的问题是,如果我点击home.html上的“新”链接,它应该重定向到new.html,是否可以在new.html中查看“$ scope.a”的值...请帮助我。
答案 0 :(得分:0)
我不认为页面之间共享控制器是最好的做法是AngularJS。每个视图都应该有自己的控制器。如果要在每个视图页面之间传递数据,可以使用angular-ui-router
通过ui-sref
传递参数来实现。我建议您阅读有关AngularJS Best Practice here的更多信息。它提供了AngularJS中使用的最佳样式指南。
答案 1 :(得分:0)
您无法在new.html中访问home.html中设置的范围变量。
我们可以在任意数量的视图中使用相同的控制器。但是,当创建新视图时,将使用$ scope的新实例创建控制器。
控制器的行为就像第一次加载一样。
要解决您的问题,您可以创建角度服务或工厂,并将其用于数据共享。
答案 2 :(得分:0)
每个视图都应该有自己的控制器。如果你想要&#34;全球&#34;函数/变量,即视图(控制器)之间共享的代码,您应该查看services概念。创建一个包含k
变量的服务,并通过依赖注入使控制器中的服务可用。
angular.module('myApp')
.factory('myService', function() {
//local variable or functions here
var local = true;
//variables and functions exposed to the outside
return {
k: 0
}
});
现在包含myService
作为kkCtrl
的依赖项:
app.controller('kkCtrl',["$scope", "$http", "myService", function($scope, $http, myService) {
您现在可以设置或获取k
:
$scope.getDatass= function(a){
myService.k = a;
}