我是Angular的新手,但我已成功完成了几个基本示例。现在我正在考虑开始我的第一个真实世界的Angular / MVC / WebAPI应用程序。它将成为时间卡类型的应用程序,我要做的第一件事是显示本地用户的当前时间。我在Index.cshtml页面上使用Angular进行了基本的HelloWorld,以确保我对Angular的引用是正确的。这很有效......顺便说一句,我使用的是Angular v1.5。
我找到了以下帖子,我试图使用混合的代码。
http://www.codeproject.com/Articles/806029/Getting-started-with-AngularJS-and-ASP-NET-MVC-Par
http://stackoverflow.com/questions/23383233/how-to-make-a-ticking-clock-time-in-angularjs-and-html
但是我没有让它上班,这可能是我想念的简单事情,但我却没有看到它。
这是我的_Layout.csthml。我在中列出了ng-app和ng-controller
<html>
代码
<!DOCTYPE html>
<html ng-app="VirtualTimeClockApp" ng-controller="LandingPageController">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@Html.Partial("_LoginPartial")
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/angular")
@Scripts.Render("~/bundles/VirtualTimeClockApp")
@RenderSection("scripts", required: false)
</body>
</html>
这是我的主页/ Index.cshtml
@model VirtualTimeClock.ViewModels.HomeViewModel
@{
ViewBag.Title = "Home Page";
}
<div class="jumbotron">
<h1>@Model.currentServerTime</h1>
<div ng-controller='TimeCtrl'>
<p>{{ clock | date:'HH:mm:ss'}}</p>
</div>
<p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
<p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p>
</div>
这是我的BundleConfig.cs文件。最后一个Bundles.Add旁边是我将控制器目录和主.js文件捆绑在一起的地方。
namespace VirtualTimeClock
{
public class BundleConfig
{
// For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js"));
bundles.Add(new ScriptBundle("~/bundles/angular").Include(
"~/Scripts/angular.js"));
bundles.Add(new ScriptBundle("~/bundles/VirtualTimeClockApp")
.IncludeDirectory("~/Scripts/Controllers", "*.js")
.Include("~/Scripts/VirtualTimeClock.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
}
}
}
这是我的VirtualTimeClock.js文件。我不是100%在这里的事情是VirtrualTimeClockApp的声明然后将模块添加到&#34; VirtualTimeClockApp&#34;在?
中引用var VirtualTimeClockApp = angular.module('VirtualTimeClockApp', []);
VirtualTimeClockApp.controller('LandingPageController', LandingPageController);
这是我的LandingPageController.js文件。
var module = angular.module('VirtualTimeClockApp', []);
module.controller('TimeCtrl', function ($scope, $interval) {
var tick = function () {
$scope.clock = Date.now();
}
tick();
$interval(tick, 1000);
});
答案 0 :(得分:1)
将VirtualTimeClock.js更改为...
(function () {
'use strict';
angular.module('VirtualTimeClockApp', []);
})();
(function () {
'use strict';
angular
.module('VirtualTimeClockApp')
.controller('LandingPageController', LandingPageController);
function LandingPageController() {
}
})();
和另一个文件:
(function () {
'use strict';
angular
.module('VirtualTimeClockApp')
.controller('TimeCtrl', TimeCtrl);
TimeCtrl.$inject = ['$scope', '$interval'];
function TimeCtrl($scope, $interval) {
var tick = function () {
$scope.clock = Date.now();
}
tick();
$interval(tick, 1000);
}
})();
并重新排序捆绑...
bundles.Add(new ScriptBundle("~/bundles/VirtualTimeClockApp")
.Include("~/Scripts/VirtualTimeClock.js")
.IncludeDirectory("~/Scripts/Controllers", "*.js")
);
我认为主要问题是捆绑订单,但使用IIFE更清晰。另外,值得一读style guide。
答案 1 :(得分:0)
从此处删除括号
var VirtualTimeClockApp = angular.module('VirtualTimeClockApp',[]);
创建一个名为LandingPageController的函数。它应该是这样的:
var VirtualTimeClockApp = angular.module('VirtualTimeClockApp');
VirtualTimeClockApp.controller('LandingPageController', LandingPageController);
function LandingPageController() {}
如果使用括号,则表示您正在创建一个新模块,在本例中已经在 LandingPageController.js 文件中创建