【发布时间】:2019-06-10 05:04:59
【问题描述】:
我正在用控制器注入新的 DOM:
app.controller('cart', function ($scope, $http) {
$scope.content = {
label: "hello, world!",
};
});
var $html = '<div ng-controller="cart"></div>';
var $root = $('[ng-app]');
angular.element($root).injector().invoke(function ($compile) {
var $scope = angular.element($root).scope();
$root.append($compile($html)($scope));
// Finally, refresh the watch expressions in the new element
$scope.$apply();
});
在$root.append($compile($html)($scope)); 中发生错误。当我使用 Chrome 进行调试时,我什至可以看到控制器已在 app 上注册。
代码有什么问题?
编辑
所以如果我这样说:
var app = angular.module('app', ['ngSanitize']);
app.controller('base', function ($scope, $http) {
....
});
app.controller('cart', function ($scope, $http) {
....
});
在同一个文件中,它可以工作。我的情况是我有 2 个单独的 js 文件。一个文件包含:
var app = angular.module('app', ['ngSanitize']);
app.controller('base', function ($scope, $http) {
....
});
上面的文件首先被加载。然后第二个文件有:
app.controller('cart', function ($scope, $http) {
....
});
var $html = '<div ng-controller="cart"></div>';
var $root = $('[ng-app]');
angular.element($root).injector().invoke(function ($compile) {
var $scope = angular.element($root).scope();
$root.append($compile($html)($scope));
// Finally, refresh the watch expressions in the new element
$scope.$apply();
});
并在第一个文件完成后稍后加载。所以问题应该改成:
模块初始化后如何给模块注入新的控制器?
【问题讨论】:
-
代码适用于这个DEMO on PLNKR。
-
两个控制器都定义在不同的文件中。这会导致错误。
标签: javascript jquery angularjs