我刚开始学习Angular JS并创建了一些基本样本,但是我遇到了以下问题.
我创建了2个模块和2个控制器.
shoppingCart -> ShoppingCartController
namesList -> NamesController
Run Code Online (Sandbox Code Playgroud)
每个控制器都有相关的视图.第一个视图呈现正常,但第二个不呈现.没有错误.
请帮我解决这个问题.
也有可能在View中添加控制台以检查从Controller传递的值.
例如,在下面的div中我们可以添加console.log并输出控制器值
<div ng-app="shoppingCart" ng-controller="ShoppingCartController">
</div>
Run Code Online (Sandbox Code Playgroud) AngularJS如何处理服务名称之间的冲突?例如,如果我声明了两个模块,每个模块包含一个名为'foo'的服务.如果我想创建可重用模块或想避免与其他第三方模块发生冲突,那么"命名空间"服务的好方法是什么?
假设我有两个AngularJS模块,例如foo和bar,它们都定义了一个名为的服务baz.
在我的申请中,我依靠他们说:
var app = angular.module('app', [ 'foo', 'bar' ]);
Run Code Online (Sandbox Code Playgroud)
然后我可以尝试使用baz控制器中的服务
app.controller('blaController', [ '$scope', 'baz', function($scope, baz) {
// ...
}]);
Run Code Online (Sandbox Code Playgroud)
如何定义我想要使用的两种服务中的哪一种?有没有像完全合格的名字?
如果我有一些定义相同value对象的模块:
var m1 = angular.module('m1', []);
m1.value('test', 'AAA');
var m2 = angular.module('m2', []);
m2.value('test', 'BBB');
Run Code Online (Sandbox Code Playgroud)
注意m1,m2两者都具有相同的值test.
然后在主模块中,我依赖于它们两个:
var app = angular.module('angularjs-starter', ['m1','m2']);
app.controller('MainCtrl', function($scope, test) {
$scope.test = test;
});
Run Code Online (Sandbox Code Playgroud)
HTML非常简单:
<body ng-controller="MainCtrl">
[{{test}}]
</body>
Run Code Online (Sandbox Code Playgroud)
它将显示[BBB]在最后一页.我可以看到该值test的m1已经的一个推翻m2.
你可以在这里看一个现场演示:http://plnkr.co/edit/u7u8p0nYqq9CvNxWKv5G?p = preview
有没有什么办法来显示的值test都来自m1与m2在同一页面中?
我在我的应用程序中使用angular-bootstrap-colorpicker,我遇到了一个奇怪的问题.colorpicker模块有一个名为的工厂Slider.这导致颜色选择器无法工作,因为我的应用程序也有一个名为的工厂Slider.不可能在应用程序中重构每一次这样的事情,无论如何它似乎是一个草率的解决方法.抛出的错误是
未捕获的TypeError:Slider.setSaturation不是函数
我得出的结论是因为我的应用程序的工厂没有方法setSaturation而Angular被"混淆"了.我对工厂以及Angular如何组织它们并不是很了解,但似乎很奇怪它们可以在这样的模块之间使用.例如
angular.module('thomasApp', [])
...
.factory('Slider', ...
Run Code Online (Sandbox Code Playgroud)
受到影响
angular.module('colorpicker.module', [])
...
.factory('Slider', ...
Run Code Online (Sandbox Code Playgroud)
或相反亦然.
有没有我可以划分这个颜色选择器,以便它不会干扰我的Slider工厂?
我同意链接的答案,即使用前缀作为命名空间是一个聪明的主意.然而,这将需要不切实际的重构量.我很欣赏下面的答案,但它并没有足够的充实让我能够付诸行动.
1)这真的是最好的解决方案(除了项目开头的前缀)吗? - 如果我做这样的改变,下次我做凉亭更新时会删除它,还是有人拉下我的项目并安装了凉亭?
2)有更好的方法吗? - 如果没有,是否可以扩展当前的答案并解释发生了什么?
在页面上,我有几个Angular模块.对于每个模块,我定义一个包含模块版本的常量.
var module1 = angular.module('module1').constant('version', '1.2.3');
var module2 = angular.module('module2').constant('version', '2.0.0');
...
Run Code Online (Sandbox Code Playgroud)
我虽然在模块中定义了一个常量.但是当我在module1中使用常量时,我得到的值是'2.0.0'......
有没有办法定义一个适合模块的常量(或其他任何东西)?
编辑:对于替代解决方案,您能否解释一下如何使用它,例如在控制器声明中?
module2.controller('myCtrl', function( $scope, $http, $q, ..., version ){
// Here I can use the constant 'version'
}
Run Code Online (Sandbox Code Playgroud)