我是Angular的新手并试图找出如何做事......
使用AngularJS,如何注入要在另一个控制器中使用的控制器?
我有以下代码段:
var app = angular.module("testApp", ['']);
app.controller('TestCtrl1', ['$scope', function ($scope) {
$scope.myMethod = function () {
console.log("TestCtrl1 - myMethod");
}
}]);
app.controller('TestCtrl2', ['$scope', 'TestCtrl1', function ($scope, TestCtrl1) {
TestCtrl1.myMethod();
}]);
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时,我收到错误:
Error: [$injector:unpr] Unknown provider: TestCtrl1Provider <- TestCtrl1
http://errors.angularjs.org/1.2.21/$injector/unpr?p0=TestCtrl1Provider%20%3C-%20TestCtrl1
Run Code Online (Sandbox Code Playgroud)
我是否应该尝试在另一个控制器内使用控制器,还是应该将其作为服务?
我有一个选择div,我正在使用所选的jquery插件来设置样式并添加功能(最值得注意的是,搜索).div看起来像这样,
<select data-placeholder="add a foobar" id="foobar" style="width: 350px;">
<option value=""></option>
</select>
Run Code Online (Sandbox Code Playgroud)
我正在使用这样选择的插件,
$('#foobar').chosen();
Run Code Online (Sandbox Code Playgroud)
当一些AJAX正在加载时,我想禁用整个<select>
div.也许有这样的事情,
$('#foobar').disable()
Run Code Online (Sandbox Code Playgroud)
或这个
$('#foobar').prop('disabled', true)
Run Code Online (Sandbox Code Playgroud)
我想你应该已经明白了.
关于如何做到这一点的任何想法?我已经尝试了很多不同的东西,比如使用jquery惯用法来禁用东西,禁用<select>
它只是禁用底层选择,而不是选择它上面的东西.我甚至采取了手动添加另一个高的div而z-index
只是灰色的盒子,但我认为这可能是丑陋和错误.
谢谢您的帮助!
如何将字节数组转换为字符串?
我发现这些功能正好相反:
function string2Bin(s) {
var b = new Array();
var last = s.length;
for (var i = 0; i < last; i++) {
var d = s.charCodeAt(i);
if (d < 128)
b[i] = dec2Bin(d);
else {
var c = s.charAt(i);
alert(c + ' is NOT an ASCII character');
b[i] = -1;
}
}
return b;
}
function dec2Bin(d) {
var b = '';
for (var i = 0; i < 8; i++) {
b = (d%2) + b;
d …
Run Code Online (Sandbox Code Playgroud) 以下是我的代码段.我想用angular来验证我的下拉列表.
<td align="left" width="52%">
<span class="requiredSmall">*</span>
<select class="Sitedropdown" style="width: 220px;"
ng-model="selectedSpecimen().serviceID"
ng-options="service.ServiceID as service.ServiceName for service in services">
<option value="" ng-selected="selected">Select Service</option>
</select>
</td>
Run Code Online (Sandbox Code Playgroud)
有效方式:
有效值可以是"选择服务"之外的任何值,它是我的默认值.像其他ASP.net要求字段验证器DefaultValue ="0"用于下拉列表,所以这里我的下拉列表将从服务绑定,我想选择除"选择服务"之外的所有其他值.
我正在使用bootstrap模板,我想改变手风琴默认工作的方式.
如何在首次看到页面时(加载时)关闭切换?
<div class="accordion-heading">
<a class="accordion-toggle"
data-toggle="collapse"
data-parent="#accordion2"
href="#collapseOne">Open!</a>
</div>
<div id="collapseOne" class="accordion-body collapse in">
<div class="span6">
<div class="well well-small">
<div class="accordion-toggle">
...some text...
</div>
</div>
</div>
<div class="span2"></div>
</div>
Run Code Online (Sandbox Code Playgroud) 我在Visual Studio中创建了一个全新的MVC4 Web应用程序,除了为它添加一个Home控制器和一个"Hello world"索引视图之外,它没有做任何事情.然后我安装了MiniProfiler NuGet包并将必要的几行放入_Layout.cshtml
.这是我在发布模式下运行网站时获得的(在IIS中托管):
渲染时间因页面加载而异,但130ms的速度与它的速度差不多.这对我来说似乎有点慢,因为我已经看到其他人在30ms或更快时间内呈现页面.有关为什么渲染会因为一个全新的空MVC4项目而变慢的想法?我的处理器是Intel Core i5-2400,机器有16GB RAM.
顺便说一句,这不是第一次加载页面; 在获得130ms的结果之前,我重新加载了几次页面.
更新:
我按照PSCoder的答案中的建议(删除除RazorViewEngine之外的所有内容),并将渲染时间减半:
这真的很好,但是对于Render
页面的主要操作我仍然可以达到70ms或更高; 理想情况下,我想将其减半或更好.
具体来说,我想问:
我在动态列表中使用Twitter Bootstrap的popover.列表项有一个按钮,当我单击按钮时,它应该显示弹出窗口.当我在非动态测试时,它工作正常.
这是我的非动态列表的JavaScript
$("button[rel=popover]").popover({
placement : 'right',
container : 'body',
html : true,
//content:" <div style='color:red'>This is your div content</div>"
content: function() {
return $('#popover-content').html();
}
})
.click(function(e) {
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
但是,它在动态列表上不能很好地工作.当我单击"两次"按钮时它会显示出来,并且只显示一个列表项我点击一次.
我的HTML:
<ul id="project-list" class="nav nav-list">
<li class='project-name'>
<a >project name 1
<button class="pop-function" rel="popover" ></button>
</a>
</li>
<li class='project-name'>
<a>project name 2
<button class="pop-function" rel="popover" ></button>
</a>
</li>
</ul>
<div id="popover-content" style="display:none">
<button class="pop-sync"></button>
<button class="pop-delete"></button>
</div>
Run Code Online (Sandbox Code Playgroud)
我的动态JavaScript:
$(document).on("click", "#project-list li" , function(){
var username = $.cookie("username");
var …
Run Code Online (Sandbox Code Playgroud) 我正在使用UI.Bootstrap手风琴,我已经定义了我的标题:
<accordion-group ng=repeat="(cname, stations) in byClient">
<accordion-heading>
{{ cname }} <span class="pull-right"> {{ Object.keys(stations).length }} Stations</span>
</accordion-heading>
Run Code Online (Sandbox Code Playgroud)
当它显示Object.keys(stations).length
解决方案为零.如果我在控制器中放入相同长度的呼叫,我会收回预期的计数.是否存在阻止方法调用在AngularJS中工作的内容?
手风琴的其余部分使用stations
了预期的动作,所以我知道它正在被正确填充.该byClient
数据结构基本上看起来像这样:
{
"Client Name" : {
"Station Name": [
{...},
{...}
]
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用angular-ui-router resolve
来从服务器获取数据,然后再转到状态.有时,对服务器的请求失败,我需要通知用户有关失败的信息.如果我从控制器调用服务器,我可以在then
其中调用我的通知服务,以防呼叫失败.我将调用放入服务器,resolve
因为我希望后代状态在服务器启动之前等待服务器的结果.
如果对服务器的调用失败,我在哪里可以捕获错误?(我已经阅读了文档,但仍然不确定如何.另外,我正在寻找尝试这个新代码段工具的理由:).
"use strict";
angular.module('MyApp', ["ui.router"]).config([
"$stateProvider",
"$urlRouterProvider",
function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("/item");
$stateProvider
.state("list", {
url: "/item",
template: '<div>{{listvm}}</div>' +
'<a ui-sref="list.detail({id:8})">go to child state and trigger resolve</a>' +
'<ui-view />',
controller: ["$scope", "$state", function($scope, $state){
$scope.listvm = { state: $state.current.name };
}]
})
.state("list.detail", {
url: "/{id}",
template: '<div>{{detailvm}}</div>',
resolve: {
data: ["$q", "$timeout", function ($q, $timeout) {
var deferred = $q.defer();
$timeout(function () {
//deferred.resolve("successful");
deferred.reject("fail"); // resolve fails …
Run Code Online (Sandbox Code Playgroud)我正在尝试使用ng-repeat和字典样式语法并对键值应用顺序.
(key, value) in something | orderBy:'key'
似乎OrderBy没有按预期工作
javascript ×6
angularjs ×5
jquery ×2
asp.net ×1
asp.net-mvc ×1
c# ×1
casting ×1
css ×1
dom ×1
html ×1
performance ×1
popover ×1
toggle ×1