【问题标题】:one way object from controller to directive从控制器到指令的一种方式对象
【发布时间】:2016-10-25 11:34:47
【问题描述】:

我想将对象从控制器传递到指令,但不是双向绑定。

我尝试使用 JSON.stringify 并且它可以工作,但在 HTML 中它会显示整个数据。

有什么办法可以实现吗?

在我的控制器中: $scope.obj= { selectedItems=[1,2,3]}; 在 html 中: <my-dir pass-obj= "obj"><my-dir> 在指令中: scope:{passObj='@'}

它给我的字符串是“obj”而不是对象。

【问题讨论】:

  • 你不能用@吗?
  • 仅此密码字符串!我必须传递一个对象
  • JSON.stringify 也会将其作为字符串传递,因此您的评论并不能完全阐明您的问题。请发布您的问题的minimal reproducible example。
  • 是的,我提到我可以使用 JSON.stringify 但它不会在浏览器的检查元素上以字符串形式显示我的所有对象吗?
  • @claies 添加了一些代码..

标签: angularjs


【解决方案1】:

在旧版本的 AngularJS 中,单向绑定是使用 $watch 完成的。

app.directive("myDir", function() {
    return {
        scope: {},
        link: function(scope, elem, attrs) {
            //one-way binding
            scope.$parent.$watch("attrs.passObj", function(newValue) {
                scope.passObj = newValue;
            });
        }
    };
 });

上面的例子相当于用AngularJS 1.5做单向绑定:

 scope: { passObj: '<' }

【讨论】:

    【解决方案2】:

    这应该工作..

    控制器:

    $scope.obj= { selectedItems=[1,2,3]}; 
    

    html:

    <my-dir passObj= "::obj"><my-dir> 
    

    以前有人问过,你可以在这里阅读更多; One-way binding in Angular directives

    【讨论】:

    • 但这是一次性绑定,如果我的控制器 obj 改变也不会改变
    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 2015-04-04
    • 2013-06-17
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2017-06-05
    相关资源
    最近更新 更多