gpt4 book ai didi

javascript - 在 AngularJS 中使用 "Controller as something"

转载 作者:行者123 更新时间:2023-11-30 15:14:36 25 4
gpt4 key购买 nike

我对 AngularJS Controller 的“as”语法有疑问。我正在尝试使用 bootstrap nanomodals 并将 Controller 附加到它们 $scope。

现在,我为我的模式创建 Angular 组件。我也在 html 中创建我的对话框。

我的 html 代码:

<body ng-app="application">
<div ng-controller="accountController as $acc" class="controller-account">
<script type="text/ng-template" id="loginModal.html">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Nowe konto</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="userNameInput">Nazwa użytkownika:</label>
<input type="text" class="form-control" id="userNameInput" placeholder="Wprowadź nazwę użytkownika">
</div>
<div class="form-group">
<label for="userPasswordInput">Hasło:</label>
<input type="password" class="form-control" id="userPasswordInput" placeholder="Password">
</div>
<div class="form-group">
<label for="userEmailInput">E-Mail:</label>
<input type="email" class="form-control" id="userEmailInput" placeholder="Wprowadź E-mail">
</div>
<button ng-click="$acc.okButton()" class="btn btn-primary">Załóż konto</button>
</form>
</div>
</script>

我的 JS 脚本:

var angularApp = angular.module('application', ['ngAnimate', 'ngSanitize', 'ngCookies', 'ui.bootstrap']);
angularApp.component('loginModalComponent', {
templateUrl: 'loginModal.html',
bindings: {
resolve: '<',
close: '&',
dismiss: '&'
},
controller: () => {
var $acc = this;

$acc.$onInit = () => {

};

$acc.okButton = () => {
console.log('Liiiii');
//HTTP request about login
};

$acc.closeButton = () => {
$acc.close();
}
}


});

angularApp.controller('accountController', ['$scope', '$http', '$cookies', '$uibModal',
function($scope, $http, $cookies, $uibModal){
var $acc = this;

$acc.isUserSignIn = false;

$acc.loginModalOpen = () => {
var modalInstance = $uibModal.open({
animation: true,
component: 'loginModalComponent',
resolve: {

}
});
};
}]);

我不知道为什么,但我不能在这个例子中使用 $acc.okButton() 函数。

我用了thisthis解决这个问题,但我不能这样做。这里有问题,但我不知道是什么。

最佳答案

您声明了一个组件,但我在您的 html 代码中看不到它。

因此,首先您需要获取模态的 html 并将其放入文件“loginModal.html”并从中删除“ng-controller”指令。所以该文件中的代码应该是这样的:

看来您需要替换它:

<div ng-controller="accountController as $acc" class="controller-account">

用这个:

<login-modal-component class="controller-account" />

在这种情况下,它将使用组件声明中描述的 Controller 。但是您还要将 controllerAs: '$acc' 添加到您的组件,因为默认情况下它使用 $ctrl

因此您还需要像这样稍微更改代码:

    angularApp.component('loginModalComponent', {
templateUrl: 'loginModal.html',
bindings: {
resolve: '<',
close: '&',
dismiss: '&'
},
controller: () => {
var $acc = this;

$acc.$onInit = () => {

};

$acc.okButton = () => {
console.log('Liiiii');
};

$acc.closeButton = () => {
$acc.close();
}
},
controllerAs: '$acc' // ADD THIS LINE
});

关于javascript - 在 AngularJS 中使用 "Controller as something",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44661996/

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