我最初需要用一些数据预先填充文本类型,但 Angularjs 不断将我的文本类型重置为空,即使我为其设置了值属性......那么,如何在页面加载时使用该值最初定义它?我需要使用用户电子邮件设置此关键字模型,将值添加为属性不起作用......
{{ form_row(form.keyword, {'attr': {'ng-model': 'keyword'}} )}}
我的用户作为参数在控制器中发送。
public function addAction(User $user = null, Request $request)
这是我的Angularjs控制器,我希望实现的是最初使用用户电子邮件声明关键字。
//$scope.keyword = $user.email.
我现在正在做的是最初将其设置为空,这就是为什么它一直将 value 属性预设为空的原因。
在你的控制器中,你必须使用Symfony Serializer组件来序列化你的用户,然后将这个序列化的对象作为属性传递给你的树枝,并在javascript中反序列化它:
use SymfonyComponentSerializerSerializerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class DefaultController extends AbstractController {
...
public function addAction(User $user = null, Request $request, SerializerInterface $serializer){
...
$serializedUser = $serializer->serialize($user, 'json');
return $this->render('default/add_action.html.twig', [
'user' => $serializedUser,
'form' => $form->createView()
]);
}
请注意,如果用户实体中有实体关联,则可能会遇到循环引用问题。
在这种情况下,在序列化用户时,您必须使用序列化组(此处为doc(,如下所示:
$serializedUser = $serializer->serialize($user, 'json', ['groups' => ['add-action']]);
最后在你的树枝中,你必须在你的容器div 中做类似的事情:
<div id="form-container" ng-init="user = {{ user|e('html_attr') }}">
试试这个:
$scope.keyword = "{{ user.email }}";
由于twig和Angularjs使用相同的插值"{{}}"。您可以将 angularjs 配置为使用其他插值字符串,例如 "[[ ]]";