(function() {
var app = angular.module("someawesomemodule", []);
app.factory('data', function(){
return { sometest: 'x' };
});
app.controller("FirstController", function( $scope, data ) {
$scope.data = data;
$scope.data.sometest = "a";
});
})
为什么这不起作用?
(function() {
var app = angular.module("someawesomemodule", []);
app.factory('data', function(){
return { sometest: 'x' };
});
app.controller("FirstController", function( data ) {
data.sometest = "a";
});
})
什么是$ scope ..?
答案 0 :(得分:1)
$ scope是视图和控制器之间的粘合剂。如果你想在这些之间共享数据,你必须使用。但是你可以使用这种语法:
app.controller("FirstController", function( data ) {
this.data.sometest = "a";
});
但这不是最佳方案:)最佳方式是使用$ scope:
(function() {
var app = angular.module("someawesomemodule", []);
app.factory('data', function(){
return { sometest: 'x' };
});
app.controller("FirstController", function( $scope, data ) {
$scope.data = data;
$scope.data.sometest = "a";
});
})
在视图中:
<div ng-controller="FirstController">
{{data.sometest}}
</div>
This将是思考Scope和Angular JS的良好开端。如果您开始学习AngularJS,请在阅读Angular JS页面中的教程之后阅读一些设计内容,例如this
答案 1 :(得分:1)
$ scope是一个容纳控制器数据的容器。 $ scope不能直接用于其他控制器,因此它有助于保持代码部分之间的分离。如果控制器数据已添加到$ scope中,则视图只能访问控制器数据。
var myGreatVariable;
无法观看...
$scope.myVar = myGreatVariable;
View现在可以访问变量并显示如下:
{{ myVar }}
所有注入它的控制器共享一个全局范围,名为$ rootScope。你不应该经常使用$ rootScope,因为你实际上想要为此提供服务的可能性更大。
app.controller("SomeController", function( $rootScope ) {
$rootScope.userId = 123;
});
app.controller("SomeController", function( $scope, UserService ) {
$scope.userId = UserService.id;
});
答案 2 :(得分:1)
$scope
是您的控制器和您的视图之间的粘合剂。它保存绑定到UI /标记的数据。
您放入控制器中$scope
的项目可用于您的标记,包括值和功能。
$rootScope
是您的应用中通过父/子关系的所有范围的父级。
你不能使用它的真正原因是Dependency Injection
angular的依赖注入引擎根据字符串(参数名称)按照它们出现的顺序进行查找,这就是你的原因。请看这两个语法:
module.controller('MyCtrl', function($scope){});
module.controller('MyCtrl', ['$scope', function($scope){}]);
两者都有效,但如果你缩小/ uglify你的代码,第一个将会中断,因为$scope
将被重命名,但'$scope'
不会。
因此,当您将$scope
更改为data
时,angular不知道要传递给控制器的内容。
答案 3 :(得分:0)
范围在角度显影指南中描述。 https://docs.angularjs.org/guide/concepts