gpt4 book ai didi

javascript - 如何从指令 templateUrl 访问 $rootScope 变量

转载 作者:行者123 更新时间:2023-11-28 15:12:04 25 4
gpt4 key购买 nike

我已经成功地通过将 url 应用到 rootScope 来使跨域 HTML 模板正常工作,我可以从 Controller 和其他 HTML 文件访问该 URL,但是当从指令访问模板时就会出现问题。这是我的指令代码:

angular.module("bertha")
.directive("bthToggleHeader", function() {
var controller = [
"$scope", "$rootScope", "_", function ($scope, $rootScope, _) {
if ($scope.tglOpen)
$scope.tglShowSection = true;

$scope.toggleShowSection = function() {
$scope.tglShowSection = !$scope.tglShowSection;
};
}
];

return {
restrict: "E",
scope: {
tglHeading: "@",
tglShowSection: "=",
tglOpen: "=?"
},
transclude: true,
controller: controller,
templateUrl: $rootScope.cdnUrl + "/html/directives/bthToggleHeader.html"
};
});

尝试此操作时,我得到:ReferenceError:$rootScope 未定义。我在这里做错了什么明显的事情吗?

在一个工作项目中,我们尝试使用链接函数,但它根本无法很好地缩小,因此采用了 Controller 方法。

任何帮助将不胜感激!谢谢。

最佳答案

您可以在指令级别使用 Angular 的依赖注入(inject) - 因此只需将 $rootScope 放在那里即可。请参阅下面的示例:

angular
.module('bertha')
.directive('bthToggleHeader', ['$rootScope', function($rootScope) {
var controller = [
'$scope', '_',
function($scope, _) {
if ($scope.tglOpen)
$scope.tglShowSection = true;

$scope.toggleShowSection = function() {
$scope.tglShowSection = !$scope.tglShowSection;
};
}
];

return {
restrict: 'E',
scope: {
tglHeading: '@',
tglShowSection: '=',
tglOpen: '=?'
},
transclude: true,
controller: controller,
templateUrl: $rootScope.cdnUrl + '/html/directives/bthToggleHeader.html'
};
}]);

正如 Joe Clay 所说,$rootScope 仅存在于 Controller 函数中 - 这就是它在外部未定义的原因。

关于javascript - 如何从指令 templateUrl 访问 $rootScope 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com