Изменить значение объекта параметра функции в директиве

0

Я пытаюсь создать функцию в пределах угловой директивы, которая должна просто изменить значение объекта.

Он не будет работать с передачей переменной непосредственно функции:

<body ng-controller="MainCtrl">
    <div test ng-click="changeVar(variable.value)">{{ variable.value }}</div>
</body> 

app.directive('test', [function(){
    return {
        link: function(scope, elem, attrs) {
          scope.variable = {
            value : "bla"
          }; 
          scope.changeVar = function(value) {
            value = "hhuhu"
          };
        }
    }
}]);

Но передача родительского объекта:

<body ng-controller="MainCtrl">
    <div test ng-click="changeObj(variable)">{{ variable.value }}</div>
</body>


app.directive('test', [function(){
    return {
        link: function(scope, elem, attrs) {
          scope.variable = {
            value : "bla"
          }; 
          scope.changeObj = function(obj) {
            obj.value = "hhuhu"
          };
        }
    }
}]);

Почему мне нужно передать родительский объект в функцию для перезаписывания значения и не может передать значение напрямую, чтобы перезаписать его? Я что-то упускаю?

Теги:

1 ответ

3
Лучший ответ

Я думаю, что здесь вам не хватает понятия о облаках в angularjs и о том, как они передаются.

когда вы объявляете свою директиву так:

app.directive('parent', [function(){
    return {
        controller: function($scope) {
        $scope.variable = {};
        // init
        $scope.variable.value = "foo";

        }
    }
}]);


app.directive('child', [function(){
    return {
        controller: function($scope) {

          // here you are directly using the parent scope
          // so you can access $scope.variable directly 
          // without sending it in the function
          $scope.changeObj = function(replacement) {
            $scope.variable.value = replacement ;
          };
        }
    }
}]);

вы в основном говорите угловатым, чтобы использовать родительскую область как область видимости, потому что вы не определяете особую область своей директивы.

(кстати, такого рода операции:

      scope.changeObj = function(obj) {
        obj.value = "hhuhu"
      };

не должно быть в функции связи, но в контроллере для меня это выглядит как логика контроллера:)

Второе, что вы можете сделать, это отправить переменную через параметр в область дочернего объекта следующим образом:

app.directive('parent', [function(){
    return {
        controller: function($scope) {
        $scope.variable = {};
        // init
        $scope.variable.value = "foo";

        }
    }
}]);


app.directive('child', [function(){
    return {
        scope:{myVariable: '='},
        controller: function($scope) {

          // here you are directly using the child scope
          // but since you have defined double binding,
          // changing this in the child will also update the parent
          $scope.changeObj = function(replacement) {
            $scope.myVariable.value = replacement ;
          };
        }
    }
}]);


<body ng-controller="MainCtrl">
    <div test my-variable="variable" ng-click="changeObj('some text')">{{ variable.value }}</div>
</body>

Надеюсь, теперь ясно

  • 0
    Хорошо, теперь я понимаю, большое спасибо за ваше время!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню