接受的解决方案将破坏指令replace: true:HTML不会被替换,使用中的特定CSS选择器将不再起作用等.
我希望我的指令,通过观察收到来自父控制器属性字符串动态地改变它的模板,所以我用$compile的这个答案连同$observe从一个有趣的教程的这一小部分,但可惜它不工作,像显示在这个plunkr.
如果在脚本中的AngularJS之前包含jQuery,则replaceWith调用会抛出以下错误:
TypeError: Cannot read property 'ownerDocument' of undefined
Run Code Online (Sandbox Code Playgroud)
但是如果我删除jQuery,强制AngularJS使用它的jqLite,同样的部分会抛出这个错误,让像我这样的jQuery不可知的东西更清晰:
TypeError: Failed to execute 'replaceChild' on 'Node': parameter 1 is not of type 'Node'.
Run Code Online (Sandbox Code Playgroud)
即使我很清楚我没有将有效的"节点"类型对象传递给我,我replaceWith也不知道如何处理这种情况,因为我期望$compile能够完成这项工作.
我所知道的唯一的事情是console.log(tplContent)看起来像这样(我承诺是对的吗?):
Object
{
config: Object
data: "<script type="text/ng-template" id="templateId.html">
? <p>TEMPLATE A</p>
?</script>"
headers: function (d)
ng339: 10
status: 200
statusText: "OK"
}
Run Code Online (Sandbox Code Playgroud)
而console.log($compile(tplContent)(scope))返回一个数组与第一个和唯一的项目具有相同的对象: …
我习惯于grunt build成功完成任务,但由于我将项目编辑与其他一些开发人员同事合并,它突然失败并出现了我以前从未见过的错误:
grunt build
Loading "imagemin.js" tasks...ERROR
>> Error: Cannot find module 'process-nextick-args'
Loading "cdnify.js" tasks...ERROR
>> Error: Cannot find module 'abbrev'
Loading "grunt-karma.js" tasks...ERROR
>> Error: Cannot find module 'uglify-js'
Running "clean:dist" (clean) task
>> 0 paths cleaned.
Running "wiredep:app" (wiredep) task
Warning: Cannot find module './lang/clone' Use --force to continue.
Aborted due to warnings.
Execution Time (2015-09-25 09:44:30 UTC)
wiredep:app 31ms
Total 31ms
Run Code Online (Sandbox Code Playgroud)
在Gruntfile.js中,我评论imagemin并cdnify输出concurrent:dist和build任务.
我做错了什么?
这里有一些关于我正在使用的东西版本的信息:
node -v …Run Code Online (Sandbox Code Playgroud) 我将尝试解释这个组件发生了什么,我已经这样定义了组件
<p-fileUpload #fileUpload accept=".csv,.txt" maxFileSize="1000000" customUpload="true" (uploadHandler)="uploadFile($event)">
Run Code Online (Sandbox Code Playgroud)
在我的包 Json 上,我有这个“primeng”:“^4.1.0-rc.3”,并且在 js 文件中有这个方法
uploadFile(event) {
for (let file of event.files) {
this.uploadedFiles.push(file);
}
this.uploadFileService.doSomething(this.uploadedFiles[0]).subscribe(x => {
this.fileInfo = x;
..do some stuff..
});
}
Run Code Online (Sandbox Code Playgroud)
它第一次按预期工作(显示组件选择、上传和取消的 3 个按钮)并让我从弹出窗口中选择文件,然后该过程继续调用 uploadFile 方法;问题是,一旦它完成,如果我尝试再次上传同一个文件,它不允许我这样做。它只允许我选择文件,但从不启用上传按钮,当然,从不调用 uploadFile 方法。但是如果我选择另一个不同于以前的文件,它会按预期工作,这意味着调用 uploadFile 方法。
我在用
this.fileUpload.clear();
Run Code Online (Sandbox Code Playgroud)
只是为了清除向用户显示上传文件的部分
有什么建议吗?
与Angular(JS)相关的最常见术语之一是SPA
我希望这些问题的答案在Angular(JS)上能更清晰。
我下面制作一个自定义编辑这个例子中<span>使用ngModelController:
https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#example
我现在要做的是能够通过指令内部的逻辑动态禁用对该字段的编辑.通过禁用它我的意思是用户根本无法编辑文本,它只会显示为常规文本.
这是一个样本plunkr:
来自plunkr的代码:
angular.module('app', [])
.controller('Ctrl', function ($scope) {
$scope.stuff = "test";
})
.directive('contenteditable',
function ($log) {
'use strict';
return {
restrict: 'A',
require: 'ngModel',
scope: {
},
link: function ($scope, $element, $attributes, ngModel) {
if (angular.isUndefined(ngModel)) {
$log.warn('ngModel is not defined');
return;
}
function read() {
ngModel.$setViewValue($element.text());
}
ngModel.$render = function () {
$element.html(ngModel.$viewValue || '');
};
}
};
}
);
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
我有一个像这样的JSON数组:
[
{
"user": "345",
"createdOn": "2015-09-01 13:17:22"
},
{
"user": "432",
"createdOn": "2015-09-01 13:27:56"
}
Run Code Online (Sandbox Code Playgroud)
]
在<div>标签中,我这样做:
<div> class="row" ng-repeat="item in array"
{{item.createdOn}}
</div>
Run Code Online (Sandbox Code Playgroud)
输出为:2015-09-01 13:50:59,但我不希望显示时间部分,即所需的输出仅为2015-09-01。我尝试使用filter但未成功。请给我一些知识。