У меня есть кнопка на моей странице, которая изменяет модель (добавляет новый объект).угловая функция вызова ng-click в контроллере
Я надеялся, что смогу сделать это в HTML, просто нажав новый объект на массив, но похоже, что мне может потребоваться вызвать контроллер для его выполнения. По какой-то причине, хотя он не может найти функцию в моем контроллере.
Вот моя кнопка:
<button ng-click="addCarton()">Add a carton</button>
Вот один из (нескольких) контроллеров на этой странице:
myController.$inject = ['$http', '$uibModal', 'cart'];
function myController($http, $uibModal, cart) {
var vm = this;
vm.addCarton = function() {
console.log("carton added!");
});
Это не делает ничего. Нет ошибок, только кнопка ничего не делает. У меня не было выбора, кроме как добавить зависимость $ scope. Это работает:
myController.$inject = ['$http', '$uibModal', 'cart', '$scope'];
function myController($http, $uibModal, cart, $scope) {
var vm = this;
$scope.addCarton = function() {
console.log("carton added!");
});
Итак, зачем с Vm = это, если я не могу его использовать?
-
Я должен упомянуть, есть и другие события, нажмите на странице, но я не имею ни малейшего представления, как они при эксплуатации:
<button type="button" ng-click="summaryModalVm.cancel()">Cancel</button>
function myController($http, $uibModal, cart, $scope) {
vm.dimensionsChoose = function (size) {
$http.post('/api/shipping/estimate', cart).then(function(response) {
var modalInstance = $uibModal.open({
controllerAs: 'summaryModalVm',
[UPDATE]
Мой маршрутизатор:
.state('layout.cart', {
url: '/cart',
templateUrl: '/Content/js/apps/store/views/cart.html',
controller: 'cartController',
controllerAs: 'cartVm',
data: { pageTitle: 'Cart' }
})
Моя вторая попытка на кнопку:
<button ng-click="cartVm.addCarton()" type="button">Add a carton</button>
Моя вторая попытка на контроллере:
function cartController($http, $uibModal, Cart, CartObservable) {
var vm = this;
vm.addCarton = function() {
console.log(":)");
};
Я нашел подобный вопрос, который, возможно, может помочь вам, ссылка [здесь] (HTTP: // StackOverflow.com/questions/11605917/this-vs-scope-in-angularjs-controller) – Ronald
Другие события кликов на странице работают, потому что они правильно используют ** Синтаксис и точечное обозначение ** Controller как ** для ссылки на функции контроллера. См. Мой ответ о том, как заставить работать вашу функцию 'addCarton'. – Lex