AngularJS指令没有设置第二级作用域对象
AngularJS directive doesn't set 2nd level of scope object
我使用指令从<script>
元素读取json数据,只要我的ng-scope
是像data
这样的第一级属性,这就可以正常工作。出于某种原因,我没有得到我的对象的第二级或更深层次属性的数据,例如data.search
。我猜这又是一些奇怪的作用域问题,或者我还没有完全理解。
为什么它设置第一级而不是第二级属性?
恰好
JS
angular.module('app', [
]);
angular.module('app').directive('jsonData', [function () {
return {
restrict: 'A',
link: function (scope, element, attributes, controller) {
scope[attributes.ngModel] = JSON.parse(element.html());
}
};
}]);
angular.module('app').controller('TestController', [
'$scope',
function ($scope) {
$scope.searchTest = {};
$scope.data = {
search: {
}
};
}]);
标记:
<head>
<link rel="stylesheet" href="style.css">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.0-beta.4/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="TestController">
<style>
pre { border: 1px solid red; padding: 5px ;}
</style>
<h3>2nd level</h3>
<script type="application/json" json-data ng-model="data.search">
{"price_from":"3","price_to":"412"}
</script>
<pre>{{data.search | json}}</pre>
<h3>1st level</h3>
<script type="application/json" json-data ng-model="data">
{"price_from":"3","price_to":"412"}
</script>
<pre>{{data | json}}</pre>
</body>
</html>
首先将指令更改为如下内容:var text =' scope.'+attributes.ngModel+'='+element.html();eval(文本),
我不确定这是最好的方法,但它会比scope[attributes.ngModel]工作得更好
为了使它不覆盖all对象,除了对对象赋值之外,还需要其他东西。比如下划线_。扩展可以工作。
感谢@Kinnza,他找出了原因,我在Angular中找到了一种方法:
我取代了scope[attributes.ngModel] = JSON.parse(element.html());
$parse(attributes.ngModel).assign(scope, JSON.parse(element.html()));
现在运行正常
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- 访问多个指令的隔离作用域
- Javascript作用域和Ajax调用;工作不正常
- 向Angular作用域对象添加对象数组——TypeError
- ng重复中的ng模型-初始化唯一作用域属性
- 在put方法之前从作用域获取数据
- 如何在html中以角度显示自定义指令的作用域
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 当我更新另一个作用域变量时,作用域变量会自动更新