我正在使用http请求从json文件中获取数据,而不是在控制器中使用。
app.controller('mainCtrl', ['$scope', 'loaderService', function ($scope, loaderService) {
//gets data from service
loaderService.getLoadedHtml().then(function (result) {
$scope.fields = result.data;
});
}]);
当$scope.fields
更改为
app.directive('dform', function () {
return {
scope: {
action: '@',
method: '@',
html: '='
},
link: function (scope, elm, attrs) {
var config = {
"html": scope.fields
};
scope.$watch('fields', function (val) {
elm.dform(config);
});
//console.log(config);
//elm.dform(config);
}
};
})
以下是我使用此指令的方法
<div html="fields" dform></div>
但在我的情况下,当$ scope.fields发生变化时,我在我的指令$ watch函数中得到scope
未定义。
问题:
如何在范围内获取scope.fields的更新值。$ watch function?
答案 0 :(得分:2)
您需要通过为其添加绑定来赋予protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string commandArgument = e.CommandArgument.ToString();
if (e.CommandName == "img")
{
Response.Write("event is fired: " + commandArgument);
}
else if (e.CommandName == "btn1")
{
Session["id"] = commandArgument;
}
}
指令访问权限:
ionViewDidLoad(){
this.platform.ready().then((readySource) => {
this.pps.getSummary(); //pps is a provider named ProdPerfService
});
}
和HTML:
fields
第一次价值可能是scope: {
action: '@',
method: '@',
html: '=',
fields: '='
}
,那么您不想拨打<dform fields="fields" ...
:
undefined
使用此HTML:
dform
您只需要scope.$watch('fields', function(newValue, oldValue) {
if (newValue === oldValue) return;
var config = {
"html": newValue
};
elm.dform(config);
});
,而无需<div html="fields" dform></div>
或添加html
作为约束:
$parent
答案 1 :(得分:1)
通常对于应尽可能透明的指令,不应使用新的范围。拥有新范围还可以防止其他指令在同一元素上请求新范围。
如果只有一个属性应该是动态的,那就像
一样简单scope: false,
link: function (scope, elm, attrs) {
scope.$watch(function () { return scope[attrs.html] }, function (val) {
if (val === undefined) return;
var config = {
action: attrs.action,
method: attrs.method,
html: val
};
elm.dform(config);
});
}
或者,bindToController
可用于更现代,面向未来的方式(取决于html
会发生什么,$scope.$watch
可以进一步升级到self.$onChanges
挂钩)
scope: true,
bindToController: {
action: '@',
method: '@',
html: '='
},
controller: function ($scope, $element) {
var self = this;
$scope.$watch(function () { return self.html }, function (val) {
if (val === undefined) return;
var config = {
action: attrs.action,
method: attrs.method,
html: val
};
$element.dform(config);
});
}
考虑到html="fields"
,上面的代码会关注fields
范围属性。
答案 2 :(得分:0)
使用$parent.fields
代替fields