将javascript变量传递到angularJS范围

时间:2014-11-30 20:50:21

标签: javascript angularjs

所以我使用MEAN堆栈创建了一个网页,并使用sessionStorage的HTML5 / Javascript变量保存了要在每个页面上传输的用户变量。

我们现在正尝试通过控制器将此值传递给angularJS。但问题是,如果没有用户输入值,我们就不知道如何将其传递到提交文件中。我们尝试将用户名显示为readonly并使用getElementByID设置值,但angularJS不识别新值,而是从旧字段中获取值,即""因为文本字段的值以空白开头,所以在angularJS范围内未定义用户。

我们还试图将该值作为隐藏范围传递,这也不起作用,因为角度

有没有办法在ng模型中声明变量? 问题是任何ng值都使用""因此,它总是认为价值只是"用户"只是文字"用户"而实际上并不是变量。 。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

如果您已将用户名保存到sessionStorage中,请执行以下操作:

window.sessionStorage.setItem("username","toby");

然后在角度控制器中你可以:

$scope.username = window.sessionStorage.getItem("username"); (编辑:这不会将username绑定到会话存储空间)

注意:如果您想在会话/本地存储中存储JSON,您应事先将其设为JSON:

window.sessionStorage.setItem("userObject", JSON.stringify(userObject));

并检索:

var userObject = JSON.parse(window.sessionStorage.getItem("userObject"));

如果您想观看会话存储,可以使用$watch

$scope.$watch(
    function(){return window.sessionStorage.getItem("username");},
    function(newVal, oldVal){
        console.log("Username changed from", oldVal, "to", newVal);
    }
);

答案 1 :(得分:0)

您可能需要angularJS $ apply()函数才能获得角度以响应更新的值。查看有关$ apply()的this有用文章。当您对Angular不知道的模型进行更改时(例如,Angular将自动进行$ apply()调用),您需要调用$ apply()。你应该将你的函数包装在$ apply()调用中,即

$scope.$apply(function(var) {
    etc.
}

此外,要将控制器中的值放入模型中,假设您使用的是MVC框架,则需要在控制器内声明一个模型变量。例如,您可能有一个控制器开始:

.controller("exampleCtrl", function($scope) {
    $scope.model = model;
}

然后,您可以通过调用

在模型中创建/更新值
$scope.model.VALUENAME = whatever value

希望这有帮助!

答案 2 :(得分:0)

这对我有用:

// in the javascript only section call an angular method to update the data when OnClick, OnChange, etc....

angular.element(document.getElementById('YourElementId')).scope().update_your_value(); 

//inside the angular controller

$scope.update_your_value =  function(){
    $scope.your_model.value        = $('#YourElementId').val(); //  or document.getElementById('YourElementId')).value
    $scope.$apply();
}