我开始使用AngularJS,据我所知,我可以为网页的不同部分设置不同的控制器。我有问题让它工作。我的页面有两部分,每部分对应ng-controller
- JSFiddle。只有先到的部分才有效。例如,目前app1
工作正常,但当我将其移到app2
以下时,只有app2正常工作。可能有什么不对?非常感谢有关此行为和任何链接的原因的任何解释。
答案 0 :(得分:65)
您可以拥有多个控制器,但在同一页面上不能有多个ng-app
指令。这意味着您的html中只应该有一个ng-app
指令,指向将在您的应用程序中使用的单个模块。
然后定义此模块并在此模块中定义所有控制器:
var app = angular.module('app', []);
app.controller('TextController', function ($scope) {
//Controller Code Here
});
app.controller('ItemController', function ($scope) {
//Controller Code Here
});
如果出于某种原因,您希望将控制器放在单独的模块中,您仍然可以这样做,并将这些模块包含为主模块的依赖项:
var items = angular.module('items', []);
var text = angular.module('text', []);
var app = angular.module('app', ['items', 'text']);
text.controller('TextController', function ($scope) {
//Controller Code Here
});
items.controller('ItemController', function ($scope) {
//Controller Code Here
});
通常,您不需要为每个控制器配备一个模块。模块用于将相关的功能组合在一起,以便于在另一个应用程序中重新使用它。
以下是一些示例的链接:
单一模块:http://jsfiddle.net/36s7q/4/
多个模块:http://jsfiddle.net/36s7q/5/
请注意,在这两个示例中,页面上只有一个ng-app。
答案 1 :(得分:8)
看看这个,我改变了很多。 http://jsfiddle.net/36s7q/6/
页面上不需要两个app模块来实现两个控制器,你可以在同一个模块中拥有多个控制器。我还简化了语法。看一看。
var items = angular
.module('app1', [])
.controller('ItemController', function($scope) {
$scope.items = [ {
title : 'Pencil',
quantity : 8,
price : 4.2
}, {
title : 'Pen',
quantity : 2,
price : 5.2
}, {
title : 'Watch',
quantity : 3,
price : 10.2
} ];
})
.controller('TextController', function($scope) {
$scope.text = {
message : 'Welcome!!'
};
});
答案 2 :(得分:1)
我建议使用路由,而不是回答您的实际问题。
请注意:解决问题需要 。但是,您可能希望在将来的项目中了解它。
如果我说得对,那么您要做的就是为页面的特定部分使用不同的控制器/视图。
要实现此目的,请创建一个应用程序模块(请记住,Angular应用程序为SPA's)。然后,您可以定义一些路线并告诉Angular在需要其中一个时使用什么:
var app = angular.module('app', ['ngRoute']);
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/', {templateUrl: './partials/views/root.html', controller: 'rootCtrl'}}).
when('/section', {templateUrl: './partials/views/section.html', controller: 'sectionCtrl'}}).
otherwise({redirectTo: '/'});
}]);
进一步阅读:http://docs.angularjs.org/api/ngRoute
请注意,Angular的最新稳定版需要ngRoute模块才能使用routeProvider。
答案 3 :(得分:1)
以下是您有多个控制器的方法:
public static PrivateKey getPrivateKey(byte[] encryptedPkcs8, String passwd) throws Exception{
EncryptedPrivateKeyInfo encryptPKInfo = new EncryptedPrivateKeyInfo(encryptedPkcs8);
Cipher cipher = Cipher.getInstance(encryptPKInfo.getAlgName());
PBEKeySpec pbeKeySpec = new PBEKeySpec(passwd.toCharArray());
SecretKeyFactory secFac = SecretKeyFactory.getInstance(encryptPKInfo.getAlgName());
Key pbeKey = secFac.generateSecret(pbeKeySpec);
AlgorithmParameters algParams = encryptPKInfo.getAlgParameters();
cipher.init(Cipher.DECRYPT_MODE, pbeKey, algParams);
KeySpec pkcs8KeySpec = encryptPKInfo.getKeySpec(cipher);
KeyFactory kf = KeyFactory.getInstance(ALGORITHM);
return kf.generatePrivate(pkcs8KeySpec);
}
我希望它有所帮助;)