ng-click在MVC局部视图中不起作用
我有一个使用angular.js和MVC的单页面应用程序。
该页面调用两个部分视图:
- 菜单
- 帐号
菜单加载正常,当用户单击菜单项时,我使用角度ng单击调用另一个局部视图,并在主页面中注入局部视图结果。
问题是,无论我尝试什么,我的帐户部分视图上的ng-click事件都不会触发:
1)主SPA页面:
Angular @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/modernizr")
2)_Menu局部视图:
@model List var app = angular.module('myApp', []); app.controller('appController', function ($scope, $http, $compile) { alert('loaded the menu controller'); $scope.Navigate = function (event) { $("#body").empty(); $scope.currentModule = "Current module - " + event.target.innerHTML; $http.get("/Account/GetAccounts").success(function (response) { $("#body").append(response); var el = angular.element('#accounts'); $compile(el)($scope); }).error(function (data, status, headers, config) { }); }; });
3)_Accounts局部视图:
@model List @foreach (var account in Model) { Account holder: @account.AccountHolderName } alert('loading accounts js'); angular.module("myApp").controller("appController", function ($scope) { alert('loaded the accounts controller'); $scope.Click = function () { alert("click"); }; });
我没有50个声誉来评论你的问题,但首先尝试将html添加到dom
$("#body").append(response);
然后按类或id获取元素并编译。
var el = angular.element('#account'); $compile(el)($scope);
如果这没有帮助尝试这个
$("#body").append($compile(angular.html(response).contents())($scope));
如果其他人遇到同样的问题,我就是这样做的。
1)主SPA页面:
@Styles.Render("~/Content/css") @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/modernizr") TREE VIEW PANEL
2)_Menu局部视图:
@model List
3)_Account局部视图:
@model List @foreach (var account in Model) { Account holder: @account.AccountHolderName
}
4)menu.js:
angular.module("myApp").controller('menuController', function ($scope, $http, $compile) { $scope.activateView = function (html) { $compile(html.contents())($scope); if (!$scope.$$phase) $scope.$apply(); }; $scope.Navigate = function (event) { $("#body").empty(); $("#body").html("") $("#sidePannel").empty(); $scope.currentModule = "Current module - " + event.target.innerHTML; $http.get("/Account/GetAccounts").success(function (response) { var body = angular.element(document.getElementById("body")); $("#body").empty(); body.html(response); var mController = angular.element(document.getElementById("mController")); mController.scope().activateView(body); $("#loader").hide(); }).error(function (data, status, headers, config) { $("#body").empty(); }); }; });
5)account.js:
angular.module("myApp").controller("accountsController", function ($scope) { $scope.Click = function (event) { var accNumber = event.target.innerHTML; $("#sidePannel").empty(); $("#sidePannel").append("" + accNumber + ""); }; });